home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / INTER53B.ZIP / INTERRUP.F < prev    next >
Text File  |  1997-01-12  |  361KB  |  9,224 lines

  1. Interrupt List, part 6 of 16
  2. Copyright (c) 1989,1990,1991,1992,1993,1994,1995,1996,1997 Ralf Brown
  3. --------D-214C-------------------------------
  4. INT 21 - DOS 2+ - "EXIT" - TERMINATE WITH RETURN CODE
  5.     AH = 4Ch
  6.     AL = return code
  7. Return: never returns
  8. Notes:    unless the process is its own parent
  9.       (see #0725 [offset 16h] at AH=26h), all open files are closed and
  10.       all memory belonging to the process is freed
  11.     all network file locks should be removed before calling this function
  12. SeeAlso: AH=00h,AH=26h,AH=4Bh,AH=4Dh,INT 15/AH=12h/BH=02h,INT 20,INT 22
  13. SeeAlso: INT 60/DI=0601h
  14. --------m-214C57-----------------------------
  15. INT 21 - Headroom - ???
  16.     AX = 4C57h
  17.     DS:DX -> target address
  18. Note:    jumps to target address instead of terminating program
  19. SeeAlso: AX=5758h
  20. --------D-214D-------------------------------
  21. INT 21 - DOS 2+ - GET RETURN CODE (ERRORLEVEL)
  22.     AH = 4Dh
  23. Return: AH = termination type
  24.         00h normal (INT 20,INT 21/AH=00h, or INT 21/AH=4Ch)
  25.         01h control-C abort
  26.         02h critical error abort
  27.         03h terminate and stay resident (INT 21/AH=31h or INT 27)
  28.     AL = return code
  29. Notes:    the word in which DOS stores the return code is cleared after being
  30.       read by this function, so the return code can only be retrieved once
  31.     COMMAND.COM stores the return code of the last external command it
  32.       executed as ERRORLEVEL
  33.     this call should not be used if the child was started with AX=4B04h;
  34.       use AH=8Ah instead
  35.     the following sequence will close a Virtual DOS Machine under OS/2 2.0
  36.       through OS/2 Merlin (but may change in the future):
  37.         MOV    AH,4Dh
  38.         INT    21h
  39.         HLT
  40.         DB    02h,0FDh
  41.       This sequence is the only way to close a specific VDM which was
  42.       booted from floppy or a disk image.
  43. SeeAlso: AH=4Bh,AH=4Ch,AH=8Ah
  44. --------D-214E-------------------------------
  45. INT 21 - DOS 2+ - "FINDFIRST" - FIND FIRST MATCHING FILE
  46.     AH = 4Eh
  47.     AL = special flag for use by APPEND (refer to note below)
  48.     CX = file attribute mask (see #0765 at AX=4301h) (bits 0 and 5 ignored)
  49.         0088h (Novell DOS 7) find first deleted file
  50.     DS:DX -> ASCIZ file specification (may include path and wildcards)
  51. Return: CF clear if successful
  52.         Disk Transfer Area filled with FindFirst data block (see #0967)
  53.     CF set on error
  54.         AX = error code (02h,03h,12h) (see #1020 at AH=59h/BX=0000h)
  55. Notes:    for search attributes other than 08h, all files with at MOST the
  56.       specified combination of hidden, system, and directory attributes
  57.       will be returned.  Under DOS 2.x, searching for attribute 08h
  58.       (volume label) will also return normal files, while under DOS 3.0+
  59.       only the volume label (if any) will be returned.
  60.     this call also returns successfully if given the name of a character
  61.       device without wildcards.  DOS 2.x returns attribute 00h, size 0,
  62.       and the current date and time.  DOS 3.0+ returns attribute 40h and
  63.       the current date and time.
  64.     immediately after an INT 2F/AX=B711h (APPEND return found name), the
  65.       name at DS:DX will be overwritten; if AL=00h on entry, the actual
  66.       found pathname will be stored, otherwise, the actual found path
  67.       will be prepended to the original filespec without a path.
  68.     under LANtastic, this call may be used to obtain a list of a server's
  69.       shared resources by searching for "\\SERVER\*.*"; a list of printer
  70.       resources may be obtained by searching for "\\SERVER\@*.*"
  71.     under the FlashTek X-32 DOS extender, the filespec pointer is in DS:EDX
  72. BUGS:    under DOS 3.x and 4.x, the second and subsequent calls to this function
  73.       with a character device name (no wildcards) and search attributes
  74.       which include the volume-label bit (08h) will fail unless there is
  75.       an intervening DOS call which implicitly or explicity performs a
  76.       directory search without the volume-label bit.  Such implicit
  77.       searches are performed by CREATE (AH=3Ch), OPEN (AH=3Dh), UNLINK
  78.       (AH=41h), and RENAME (AH=56h)
  79.     DR DOS 3.41 and 5.0 return the Directory attribute for the volume label
  80. SeeAlso: AH=11h,AH=4Fh,AX=4301h,AX=714Eh,AX=71A1h,AX=F257h/SF=02h
  81. SeeAlso: INT 2F/AX=111Bh,INT 2F/AX=B711h
  82.  
  83. Format of FindFirst data block:
  84. Offset    Size    Description    (Table 0967)
  85. ---PC-DOS 3.10, PC-DOS 4.01, MS-DOS 3.2/3.3/5.0---
  86.  00h    BYTE    drive letter (bits 0-6), remote if bit 7 set
  87.  01h 11 BYTEs    search template
  88.  0Ch    BYTE    search attributes
  89. ---DOS 2.x (and some DOS 3.x???)---
  90.  00h    BYTE    search attributes
  91.  01h    BYTE    drive letter
  92.  02h 11 BYTEs    search template
  93. ---WILDUNIX.COM---
  94.  00h 12 BYTEs    15-character wildcard search pattern and drive letter (packed)
  95.  0Ch    BYTE    search attributes
  96. ---DOS 2.x and most 3.x---
  97.  0Dh    WORD    entry count within directory
  98.  0Fh    DWORD    pointer to DTA???
  99.  13h    WORD    cluster number of start of parent directory
  100. ---PC-DOS 4.01, MS-DOS 3.2/3.3/5.0---
  101.  0Dh    WORD    entry count within directory
  102.  0Fh    WORD    cluster number of start of parent directory
  103.  11h  4 BYTEs    reserved
  104. ---OS/2 MVDM---
  105.  00h    WORD    "OS2_BMP_handle"
  106.  02h    WORD    "OS2_LastEnt"
  107.  04h    DWORD    "OS2_Checksum"
  108.  08h    BYTE    "OS2_usi_flag"
  109.  09h    DWORD    used by DOS emulator for second pass for volume-label searches
  110.  0Dh    WORD    (ret) "DOS_LastEnt" entry count within directory
  111.  0Fh    BYTE    OS/2 Processed-FindFirst flag
  112.         00h FindFirst processed by DOS
  113.         42h FindFirst processed by OS/2
  114.  10h  5 BYTEs    reserved for future use
  115. ---all versions, documented fields---
  116.  15h    BYTE    attribute of file found
  117.  16h    WORD    file time (see #1005 at AX=5700h)
  118.  18h    WORD    file date (see #1006 at AX=5700h)
  119.  1Ah    DWORD    file size
  120.  1Eh 13 BYTEs    ASCIZ filename+extension
  121. --------f-214E-------------------------------
  122. INT 21 - WILDUNIX.COM internal - INSTALLATION CHECK
  123.     AH = 4Eh
  124.     DS:DX = 0000h:0000h
  125. Return: AH = 99h if installed
  126. Program: WILDUNIX.COM is a resident Unix-style wildcard expander by Steve
  127.       Hosgood and Terry Barnaby
  128. --------D-214F-------------------------------
  129. INT 21 - DOS 2+ - "FINDNEXT" - FIND NEXT MATCHING FILE
  130.     AH = 4Fh
  131.     Disk Transfer Area contains data block from previous FindFirst or
  132.       FindNext call
  133. Return: CF clear if successful
  134.         Disk Transfer Area updated
  135.     CF set on error
  136.         AX = error code (12h) (see #1020 at AH=59h/BX=0000h)
  137. Notes:    under Novell DOS 7, if the FindFirst call (AH=4Eh) had CX=0088h, then
  138.       the next matching deleted file will be returned
  139.     since the entire state of a FindFirst/FindNext sequence is contained
  140.       in the data block in the DTA, other disk operations such as renaming,
  141.       moving, deleting, or creating files can cause inaccurate directory
  142.       searches, such as finding the same file twice
  143. BUG:    DR DOS 3.41 and 5.0 return the Directory attribute for the volume label
  144. SeeAlso: AH=12h,AH=4Eh,AX=714Fh,AX=71A1h
  145. --------D-2150-------------------------------
  146. INT 21 - DOS 2+ internal - SET CURRENT PROCESS ID (SET PSP ADDRESS)
  147.     AH = 50h
  148.     BX = segment of PSP for new process
  149. Notes:    DOS uses the current PSP address to determine which processes own files
  150.       and memory; it corresponds to process identifiers used by other OSs
  151.     under DOS 2.x, this function cannot be invoked inside an INT 28h
  152.       handler without setting the Critical Error flag
  153.     under MS-DOS 3.0+ and DR DOS 3.41+, this function does not use any of
  154.       the DOS-internal stacks and may thus be called at any time, even
  155.       during another INT 21h call
  156.     some Microsoft applications such as Quick C 2.51 use segments of 0000h
  157.       and FFFFh and direct access to the SDA (see #1027 at AX=5D06h) to
  158.       test whether they are running under MS-DOS rather than a compatible
  159.       OS; although one should only call this function with valid PSP
  160.       addresses, any program hooking it should be prepared to handle
  161.       invalid addresses
  162.     this function is supported by the OS/2 compatibility box
  163.     this call was undocumented prior to the release of DOS 5.0
  164. SeeAlso: AH=26h,AH=51h,AH=62h
  165. --------v-2150FD-----------------------------
  166. INT 21 - VIRUS - "Predator 2" - INSTALLATION CHECK
  167.     AX = 50FDh
  168. Return: AX = FD50h if resident
  169. SeeAlso: AX=4BFFh"VIRUS",AX=5454h"VIRUS"
  170. --------D-2151-------------------------------
  171. INT 21 - DOS 2+ internal - GET CURRENT PROCESS ID (GET PSP ADDRESS)
  172.     AH = 51h
  173. Return: BX = segment of PSP for current process
  174. Notes:    DOS uses the current PSP address to determine which processes own files
  175.       and memory; it corresponds to process identifiers used by other OSs
  176.     under DOS 2.x, this function cannot be invoked inside an INT 28h
  177.       handler without setting the Critical Error flag
  178.     under DOS 3.0+, this function does not use any of the DOS-internal
  179.       stacks and may thus be called at any time, even during another
  180.       INT 21h call
  181.     supported by OS/2 compatibility box
  182.     identical to the documented AH=62h
  183.     this call was undocumented prior to the release of DOS 5.0
  184. SeeAlso: AH=26h,AH=50h,AH=62h
  185. --------D-2152-------------------------------
  186. INT 21 U - DOS 2+ internal - "SYSVARS" - GET LIST OF LISTS
  187.     AH = 52h
  188. Return: ES:BX -> DOS list of lists (see #0968)
  189. Notes:    partially supported by OS/2 v1.1 compatibility box (however, most
  190.       pointers are FFFFh:FFFFh, LASTDRIVE is FFh, and the NUL header "next"
  191.       pointer is FFFFh:FFFFh).
  192.     partially supported by the Windows NT DOS box; contains only a
  193.       rudimentary Current Directory Structure (see #0986)
  194.     on return, ES points at the DOS data segment (see also INT 2F/AX=1203h)
  195.     Quarterdeck's suggested check for the use of its DOSDATA.SYS or
  196.       DOS-UP.SYS is to test whether the list-of-lists segment is greater
  197.       than the segment of the first memory block; a better check for
  198.       DOS-UP.SYS is INT 21/AX=2B01h/CX=444Dh
  199.     because not all DOS workalikes support all fields in the List of Lists,
  200.       applications should ensure that pointers are neither 0000h:0000h
  201.       nor FFFFh:FFFFh before using them
  202.     Windows for Workgroups 3.11 network and Windows95 set the path to
  203.       the local drive and directory even for network drives; in that
  204.       case the UNC form \\SERVER\SHARE can be obtained with
  205.       INT 21/AX=5F02h or INT 21/AX=5F46h. LapLink RemoteAccess does the
  206.       same even for INT 21/AX=5F02h
  207.     Windows95 GUI no longer returns the true path for a SUBSTed drive,
  208.       but MS-DOS 7.00 does; use INT 21/AH=60h to obtain the true name
  209. SeeAlso: INT 2F/AX=1203h
  210.  
  211. Format of List of Lists:
  212. Offset    Size    Description    (Table 0968)
  213.  -24    WORD    (DOS 3.1+) contents of CX from INT 21/AX=5E01h
  214.  -22    WORD    (DOS ???+) LRU counter for FCB caching
  215.  -20    WORD    (DOS ???+) LRU counter for FCB opens
  216.  -18    DWORD    (DOS ???+) address of OEM function handler (see INT 21/AH=F8h)
  217.             FFFFh:FFFFh if not installed or not available
  218.  -14    WORD    (DOS ???+) offset in DOS CS of code to return from INT 21 call
  219.  -12    WORD    (DOS 3.1+) sharing retry count (see AX=440Bh)
  220.  -10    WORD    (DOS 3.1+) sharing retry delay (see AX=440Bh)
  221.  -8    DWORD    (DOS 3.0+) pointer to current disk buffer
  222.  -4    WORD    (DOS 3.0+) pointer in DOS data segment of unread CON input
  223.         when CON is read via a handle, DOS reads an entire line,
  224.           and returns the requested portion, buffering the rest
  225.           for the next read.  0000h indicates no unread input
  226.  -2    WORD    segment of first memory control block (see #0969)
  227.  00h    DWORD    pointer to first Drive Parameter Block (see #0742 at AH=32h)
  228.  04h    DWORD    -> first System File Table (see #0980,#0981,#0982,#0983)
  229.  08h    DWORD    pointer to active CLOCK$ device's header (most recently loaded
  230.           driver with CLOCK bit set)
  231.  0Ch    DWORD    pointer to active CON device's header (most recently loaded
  232.           driver with STDIN bit set)
  233. ---DOS 2.x---
  234.  10h    BYTE    number of logical drives in system
  235.  11h    WORD    maximum bytes/block of any block device
  236.  13h    DWORD    pointer to first disk buffer (see #0990,#0991)
  237.  17h 18 BYTEs    actual NUL device driver header (not a pointer!)
  238.         NUL is always the first device on DOS's linked list of device
  239.           drivers. (see #0987)
  240. ---DOS 3.0---
  241.  10h    BYTE    number of block devices
  242.  11h    WORD    maximum bytes/block of any block device
  243.  13h    DWORD    pointer to first disk buffer (see #0991,#0993)
  244.  17h    DWORD    pointer to array of current directory structures (see #0984)
  245.  1Bh    BYTE    value of LASTDRIVE command in CONFIG.SYS (default 5)
  246.  1Ch    DWORD    pointer to STRING= workspace area
  247.  20h    WORD    size of STRING area (the x in STRING=x from CONFIG.SYS)
  248.  22h    DWORD    pointer to FCB table
  249.  26h    WORD    the y in FCBS=x,y from CONFIG.SYS
  250.  28h 18 BYTEs    actual NUL device driver header (not a pointer!)
  251.         NUL is always the first device on DOS's linked list of device
  252.           drivers. (see #0987)
  253. ---DOS 3.1-3.3---
  254.  10h    WORD    maximum bytes per sector of any block device
  255.  12h    DWORD    pointer to first disk buffer in buffer chain (see #0991)
  256.  16h    DWORD    pointer to array of current directory structures (see #0984)
  257.  1Ah    DWORD    pointer to system FCB tables (see #0981,#0982,#0983)
  258.  1Eh    WORD    number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y)
  259.  20h    BYTE    number of block devices installed
  260.  21h    BYTE    number of available drive letters (largest of 5, installed
  261.           block devices, and CONFIG.SYS LASTDRIVE=).  Also size of
  262.           current directory structure array.
  263.  22h 18 BYTEs    actual NUL device driver header (not a pointer!)
  264.         NUL is always the first device on DOS's linked list of device
  265.           drivers. (see #0987)
  266.  34h    BYTE    number of JOIN'ed drives
  267. ---DOS 4.x---
  268.  10h    WORD    maximum bytes per sector of any block device
  269.  12h    DWORD    pointer to disk buffer info record (see #0993,#0994)
  270.         Note: although the initialization code in IO.SYS uses this
  271.           pointer, MSDOS.SYS does not, instead using the hardcoded
  272.           address of the info record
  273.  16h    DWORD    pointer to array of current directory structures
  274.         (see #0984,#0985)
  275.  1Ah    DWORD    pointer to system FCB tables (see #0981,#0982,#0983)
  276.  1Eh    WORD    number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y)
  277.         (always 00h for DOS 5.0)
  278.  20h    BYTE    number of block devices installed
  279.  21h    BYTE    number of available drive letters (largest of 5, installed
  280.           block devices, and CONFIG.SYS LASTDRIVE=).  Also size of
  281.           current directory structure array.
  282.  22h 18 BYTEs    actual NUL device driver header (not a pointer!)
  283.         NUL is always the first device on DOS's linked list of device
  284.           drivers. (see #0987)
  285.  34h    BYTE    number of JOIN'ed drives
  286.  35h    WORD    pointer within IBMDOS code segment to list of special program
  287.           names (see #1003)
  288.         (always 0000h for DOS 5.0)
  289.  37h    DWORD    pointer to FAR routine for resident IFS utility functions
  290.         (see #0999)
  291.         may be called by any IFS driver which does not wish to
  292.           service functions 20h or 24h-28h itself
  293.  3Bh    DWORD    pointer to chain of IFS (installable file system) drivers
  294.  3Fh    WORD    the x in BUFFERS x,y (rounded up to multiple of 30 if in EMS)
  295.  41h    WORD    number of lookahead buffers (the y in BUFFERS x,y)
  296.  43h    BYTE    boot drive (1=A:)
  297.  44h    BYTE    flag: 01h to use DWORD moves (80386+), 00h otherwise
  298.  45h    WORD    extended memory size in KB
  299. ---DOS 5.0-6.0---
  300.  10h 39 BYTEs    as for DOS 4.x (above)
  301.  37h    DWORD    pointer to SETVER program list or 0000h:0000h
  302.  3Bh    WORD    (DOS=HIGH) offset in DOS CS of function to fix A20 control
  303.           when executing special .COM format
  304.  3Dh    WORD    PSP of most-recently EXECed program if DOS in HMA, 0000h if low
  305.         used for maintaining count of INT 21 calls which disable A20
  306.           on return
  307.  3Fh  8 BYTEs    as for DOS 4.x (above)
  308. ---Windows NT DOS Box---
  309.  10h  6 BYTEs    ???
  310.  16h    DWORD    pointer to array of current directory structures (see #0986)
  311.  1Ah  6 BYTEs    ???
  312.  20h    BYTE    number of block devices installed
  313.  21h    BYTE    number of local drive letters (= installed block devices)
  314.         Also size of current directory structure array.
  315.  22h 18 BYTEs    actual NUL device driver header (not a pointer!)
  316.         NUL is always the first device on DOS's linked list of device
  317.           drivers. (see #0987)
  318.  
  319. Format of DOS memory control block:
  320. Offset    Size    Description    (Table 0969)
  321.  00h    BYTE    block type: 5Ah if last block in chain, otherwise 4Dh
  322.  01h    WORD    PSP segment of owner or special flag value (see #0970)
  323.  03h    WORD    size of memory block in paragraphs
  324.  05h  3 BYTEs    unused by MS-DOS
  325.         (386MAX) if locked-out block, region start/prev region end
  326. ---DOS 2.x,3.x---
  327.  08h  8 BYTEs    unused
  328. ---DOS 4.0+ ---
  329.  08h  8 BYTEs    ASCII program name if PSP memory block or DR DOS UMB,
  330.           else garbage
  331.         null-terminated if less than 8 characters
  332. Notes:    the next MCB is at segment (current + size + 1)
  333.     under DOS 3.1+, the first memory block is the DOS data segment,
  334.       containing installable drivers, buffers, etc.     Under DOS 4.0+ it is
  335.       divided into subsegments, each with its own memory control block
  336.       (see #0974), the first of which is at offset 0000h.
  337.     for DOS 5+, blocks owned by DOS may have either "SC" or "SD" in bytes
  338.       08h and 09h.    "SC" is system code or locked-out inter-UMB memory,
  339.       "SD" is system data, device drivers, etc.
  340.     Some versions of DR DOS use only seven characters of the program name,
  341.       placing a NUL in the eighth byte.
  342. SeeAlso: #0971,#0973,#0974
  343.  
  344. (Table 0970)
  345. Values for special flag PSP segments:
  346.  0000h    free
  347.  0006h    DR DOS XMS UMB
  348.  0007h    DR DOS excluded upper memory ("hole")
  349.  0008h    belongs to DOS
  350.  FFF7h    386MAX v6.01+ ???
  351.  FFFAh    386MAX UMB control block (see #0819 at AX=4402h"386MAX")
  352.  FFFDh    386MAX locked-out memory
  353.  FFFEh    386MAX UMB (normally immediately follows its control block)
  354.  FFFFh    386MAX v6.01+ device driver
  355.  
  356. Format of MS-DOS 5+ UMB control block:
  357. Offset    Size    Description    (Table 0971)
  358.  00h    BYTE    type: 5Ah if last block in chain, 4Dh otherwise
  359.  01h    WORD    first available paragraph in UMB if control block at start
  360.           of UMB, 000Ah if control block at end of UMB
  361.  03h    WORD    length in paragraphs of following UMB or locked-out region
  362.  05h  3 BYTEs    unused
  363.  08h  8 BYTEs    block type name: "UMB" if start block, "SM" if end block in UMB
  364. SeeAlso: #0969,#0972
  365.  
  366. Format of MS-DOS 7.0 HMA memory control block:
  367. Offset    Size    Description    (Table 0972)
  368.  00h    WORD    signature "MS" (4Dh 53h)
  369.  02h    WORD    usage flag???
  370.         0000h free
  371.         else ???
  372.  04h    WORD    size of memory block in bytes (not counting MCB)
  373.  06h    WORD    offset of next memory block in HMA or 0000h
  374.  08h  8 BYTEs    unused (0)
  375. SeeAlso: #0969,#0971,#0973
  376.  
  377. Format of STARLITE (General Software's Embedded DOS) memory control block:
  378. Offset    Size    Description    (Table 0973)
  379.  00h    BYTE    block type: 5Ah if last block in chain, otherwise 4Dh
  380.  01h    WORD    PSP segment of owner, 0000h if free, 0008h if belongs to DOS
  381.  03h    WORD    size of memory block in paragraphs
  382.  05h    BYTE    unused
  383.  06h    WORD    segment address of next memory control block (0000h if last)
  384.  08h    WORD    segment address of previous memory control block or 0000h
  385.  0Ah  6 BYTEs    reserved
  386.  
  387. Format of DOS 4.0+ data segment subsegment control blocks:
  388. Offset    Size    Description    (Table 0974)
  389.  00h    BYTE    subsegment type (blocks typically appear in this order)
  390.         "D"  device driver
  391.         "E"  device driver appendage
  392.         "I"  IFS (Installable File System) driver
  393.              (MS-DOS 7) high-loaded drive data table array (see #1937)
  394.         "F"  FILES=  control block storage area (for FILES>5)
  395.         "X"  FCBS=   control block storage area, if present
  396.         "C"  BUFFERS EMS workspace area (if BUFFERS /X option used)
  397.         "B"  BUFFERS=  storage area
  398.         "L"  LASTDRIVE=     current directory structure array storage area
  399.         "S"  STACKS=  code and data area, if present (see #0975,#0976)
  400.         "T"  INSTALL= transient code
  401.  01h    WORD    paragraph of subsegment start (usually the next paragraph)
  402.  03h    WORD    size of subsegment in paragraphs
  403.  05h  3 BYTEs    unused
  404.  08h  8 BYTEs    for types "D" and "I", base name of file from which the driver
  405.           was loaded (unused for other types)
  406.  
  407. Format of data at start of STACKS code segment (if present):
  408. Offset    Size    Description    (Table 0975)
  409.  00h    WORD    ???
  410.  02h    WORD    number of stacks (the x in STACKS=x,y)
  411.  04h    WORD    size of stack control block array (should be 8*x)
  412.  06h    WORD    size of each stack (the y in STACKS=x,y)
  413.  08h    DWORD    pointer to STACKS data segment
  414.  0Ch    WORD    offset in STACKS data segment of stack control block array
  415.  0Eh    WORD    offset in STACKS data segment of last element of that array
  416.  10h    WORD    offset in STACKS data segment of the entry in that array for
  417.           the next stack to be allocated (initially same as value in
  418.           0Eh and works its way down in steps of 8 to the value in
  419.           0Ch as hardware interrupts pre-empt each other)
  420. Note:    the STACKS code segment data may, if present, be located as follows:
  421.     DOS 3.2:    The code segment data is at a paragraph boundary fairly early
  422.           in the IBMBIO segment (seen at 0070:0190h)
  423.     DOS 3.3:    The code segment is at a paragraph boundary in the DOS data
  424.           segment, which may be determined by inspecting the segment
  425.           pointers of the vectors for those of interrupts 02h, 08h-0Eh,
  426.           70h, 72-77h which have not been redirected by device drivers
  427.           or TSRs.
  428.     DOS 4.0+    Identified by sub-segment control block type "S" within the DOS
  429.           data segment.
  430. SeeAlso: #0977,INT B4"STACKMAN"
  431.  
  432. Format of array elements in STACKS data segment:
  433. Offset    Size    Description    (Table 0976)
  434.  00h    BYTE    status: 00h=free, 01h=in use, 03h=corrupted by overflow of
  435.           higher stack.
  436.  01h    BYTE    not used
  437.  02h    WORD    previous SP
  438.  04h    WORD    previous SS
  439.  06h    WORD    ptr to word at top of stack (new value for SP). The word at the
  440.           top of the stack is preset to point back to this control
  441.           block.
  442.  
  443. Format of SHARE.EXE hooks (DOS 3.1-6.00):
  444. Offset    Size    Description    (Table 0977)
  445. (offsets from first system file table--pointed at by ListOfLists+04h)
  446. -3Ch    DWORD    pointer to FAR routine for ???
  447.         Note: not called by MS-DOS 3.3, set to 0000h:0000h by
  448.             SHARE 3.3+
  449. -38h    DWORD    pointer to FAR routine called on opening file
  450.         on call, internal DOS location points at filename
  451.           (see #1027 at AX=5D06h)
  452.         Return: CF clear if successful
  453.             CF set on error
  454.                 AX = DOS error code (24h)
  455.                   (see #1020 at AH=59h/BX=0000h)
  456.         Note: SHARE directly accesses DOS-internal data to get name of
  457.             file just opened
  458. -34h    DWORD    pointer to FAR routine called on closing file
  459.         ES:DI -> system file table
  460.         Note: does something to every Record Lock Record for file
  461. -30h    DWORD    pointer to FAR routine to close all files for given computer
  462.         (called by AX=5D03h)
  463. -2Ch    DWORD    pointer to FAR routine to close all files for given process
  464.         (called by AX=5D04h)
  465. -28h    DWORD    pointer to FAR routine to close file by name
  466.         (called by AX=5D02h)
  467.         DS:SI -> DOS parameter list (see #1026 at AX=5D00h)
  468.            DPL's DS:DX -> name of file to close
  469.         Return: CF clear if successful
  470.             CF set on error
  471.                 AX = DOS error code (03h)
  472.                   (see #1020 at AH=59h/BX=0000h)
  473. -24h    DWORD    pointer to FAR routine to lock region of file
  474.         call with BX = file handle
  475.               ---DOS 3.x---
  476.               CX:DX = starting offset
  477.               SI:AX = size
  478.               ---DOS 4.0+ ---
  479.               DS:DX -> lock range
  480.                     DWORD start offset
  481.                     DWORD size in bytes
  482.         Return: CF set on error
  483.                 AL = DOS error code (21h) (see #1020 at AH=59h)
  484.         Note: not called if file is marked as remote
  485. -20h    DWORD    pointer to FAR routine to unlock region of file
  486.         call with BX = file handle
  487.               ---DOS 3.x---
  488.               CX:DX = starting offset
  489.               SI:AX = size
  490.               ---DOS 4.0+ ---
  491.               DS:DX -> lock range
  492.                     DWORD start offset
  493.                     DWORD size in bytes
  494.         Return: CF set on error
  495.                 AL = DOS error code (21h) (see #1020 at AH=59h)
  496.         Note: not called if file is marked as remote
  497. -1Ch    DWORD    pointer to FAR routine to check if file region is locked
  498.         call with ES:DI -> system file table entry for file
  499.             CX = length of region from current position in file
  500.         Return: CF set if any portion of region locked
  501.                 AX = 0021h
  502. -18h    DWORD    pointer to FAR routine to get open file list entry
  503.         (called by AX=5D05h)
  504.         call with DS:SI -> DOS parameter list (see #1026 at AX=5D00h)
  505.             DPL's BX = index of sharing record
  506.             DPL's CX = index of SFT in SFT chain of sharing rec
  507.         Return: CF set on error or not loaded
  508.                 AX = DOS error code (12h) (see #1020 at AH=59h)
  509.             CF clear if successful
  510.                 ES:DI -> filename
  511.                 CX = number of locks owned by specified SFT
  512.                 BX = network machine number
  513.                 DX destroyed
  514. -14h    DWORD    pointer to FAR routine for updating FCB from SFT???
  515.         call with DS:SI -> unopened FCB
  516.               ES:DI -> system file table entry
  517.         Return: BL = C0h???
  518.         Note: copies following fields from SFT to FCB:
  519.            starting cluster of file      0Bh     1Ah
  520.            sharing record offset      33h     1Ch
  521.            file attribute          04h     1Eh
  522. -10h    DWORD    pointer to FAR routine to get first cluster of FCB file ???
  523.         call with ES:DI -> system file table entry
  524.               DS:SI -> FCB
  525.         Return: CF set if SFT closed or sharing record offsets
  526.                 mismatched
  527.             CF clear if successful
  528.                 BX = starting cluster number from FCB
  529. -0Ch    DWORD    pointer to FAR routine to close file if duplicate for process
  530.         DS:SI -> system file table
  531.         Return: AX = number of handle in JFT which already uses SFT
  532.         Note: called during open/create of a file
  533.         Note: if SFT was opened with inheritance enabled and sharing
  534.             mode 111, does something to all other SFTs owned by
  535.             same process which have the same file open mode and
  536.             sharing record
  537. -08h    DWORD    pointer to FAR routine for closing file
  538.         Note: closes various handles referring to file most-recently
  539.             opened
  540. -04h    DWORD    pointer to FAR routine to update directory info in related SFT
  541.           entries
  542.         call with ES:DI -> system file table entry for file (see #0982)
  543.               AX = subfunction (apply to each related SFT)
  544.                 00h: update time stamp (offset 0Dh) and date
  545.                      stamp (offset 0Fh)
  546.                 01h: update file size (offset 11h) and starting
  547.                      cluster (offset 0Bh).  Sets last-accessed
  548.                      cluster fields to start of file if file
  549.                      never accessed
  550.                 02h: as function 01h, but last-accessed fields
  551.                      always changed
  552.                 03h: do both functions 00h and 02h
  553.         Note: follows ptr at offset 2Bh in system file table entries
  554.         Note: NOP if opened with no-inherit or via FCB
  555. Notes:    most of the above hooks (except -04h, -14h, -18h, and -3Ch) assume
  556.       either that SS=DOS DS or SS=DS=DOS DS and directly access
  557.       DOS-internal data
  558.     sharing hooks are not supported by DR DOS 5-6; they appear to be
  559.       supported by Novell DOS 7, with a segment of 0000h indicating the
  560.       DOS data segment
  561. SeeAlso: #0978,#0979
  562.  
  563. Format of sharing record:
  564. Offset    Size    Description    (Table 0978)
  565.  00h    BYTE    flag
  566.         00h free block
  567.         01h allocated block
  568.         FFh end marker
  569.  01h    WORD    size of block
  570.  03h    BYTE    checksum of pathname (including NUL)
  571.         if sum of ASCII values is N, checksum is (N/256 + N%256)
  572.  04h    WORD    offset in SHARE's DS of first Record Lock Record (see #0979)
  573.  06h    DWORD    pointer to start of system file table chain for file
  574.  0Ah    WORD    unique sequence number
  575.  0Ch    var    ASCIZ full pathname
  576. Note:    not supported by DR DOS SHARE 1.1 and 2.0; will reportedly be
  577.       supported by Novell DOS 7
  578. SeeAlso: #0977,#0979
  579.  
  580. Format of SHARE.EXE Record Lock Record:
  581. Offset    Size    Description    (Table 0979)
  582.  00h    WORD    offset in SHARE's DS of next lock table in list or 0000h
  583.  02h    DWORD    offset in file of start of locked region
  584.  06h    DWORD    offset in file of end of locked region
  585.  0Ah    DWORD    pointer to System File Table entry for this file
  586.  0Eh    WORD    PSP segment of lock's owner
  587. ---DOS 5+ ---
  588.  10h    WORD    lock type: (00h lock all, 01h lock writes only)
  589. SeeAlso: #0977,#0978,#0980,#0983
  590.  
  591. Format of DOS 2.x system file tables:
  592. Offset    Size    Description    (Table 0980)
  593.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  594.  04h    WORD    number of files in this table
  595.  06h  28h bytes per file
  596.     Offset    Size    Description
  597.      00h    BYTE    number of file handles referring to this file
  598.      01h    BYTE    file open mode (see #0749 at AH=3Dh)
  599.      02h    BYTE    file attribute
  600.      03h    BYTE    drive (0 = character device, 1 = A, 2 = B, etc)
  601.      04h 11 BYTEs    filename in FCB format (no path,no period,blank-padded)
  602.      0Fh    WORD    ???
  603.      11h    WORD    ???
  604.      13h    DWORD    file size???
  605.      17h    WORD    file date in packed format (see #1006 at AX=5700h)
  606.      19h    WORD    file time in packed format (see #1005 at AX=5700h)
  607.      1Bh    BYTE    device attribute (see #0768 at AX=4400h)
  608.     ---character device---
  609.      1Ch    DWORD    pointer to device driver
  610.     ---block device---
  611.      1Ch    WORD    starting cluster of file
  612.      1Eh    WORD    relative cluster in file of last cluster accessed
  613.     ------
  614.      20h    WORD    absolute cluster number of current cluster
  615.      22h    WORD    ???
  616.      24h    DWORD    current file position???
  617. SeeAlso: #0981,#0982,#0983
  618.  
  619. Format of DOS 3.0 system file tables and FCB tables:
  620. Offset    Size    Description    (Table 0981)
  621.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  622.  04h    WORD    number of files in this table
  623.  06h  38h bytes per file
  624.     Offset    Size    Description
  625.      00h-1Eh as for DOS 3.1+ (see #0982)
  626.      1Fh    WORD    byte offset of directory entry within sector
  627.      21h 11 BYTEs    filename in FCB format (no path/period, blank-padded)
  628.      2Ch    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  629.      30h    WORD    (SHARE.EXE) network machine number which opened file
  630.             (Windows Enhanced mode DOSMGR uses the virtual machine
  631.               ID as the machine number; see INT 2F/AX=1683h)
  632.      32h    WORD    PSP segment of file's owner (first three entries for
  633.               AUX/CON/PRN contain segment of IO.SYS startup code)
  634.      34h    WORD    (SHARE.EXE) offset in SHARE code seg of share record
  635.      36h    WORD    ??? apparently always 0000h
  636. SeeAlso: #0980,#0982,#0983
  637.  
  638. Format of DOS 3.1-3.3x, DR DOS 5.0-6.0 system file tables and FCB tables:
  639. Offset    Size    Description    (Table 0982)
  640.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  641.  04h    WORD    number of files in this table
  642.  06h  35h bytes per file
  643.     Offset    Size    Description
  644.      00h    WORD    number of file handles referring to this file
  645.      02h    WORD    file open mode (see AX=6C00h, #0749 at AH=3Dh)
  646.             bit 15 set if this file opened via FCB
  647.      04h    BYTE    file attribute (see #0765 at AX=4301h)
  648.      05h    WORD    device info word (see #0768 at AX=4400h)
  649.             bit 15 set if remote file
  650.             bit 14 set means do not set file date/time on closing
  651.             bit 12 set means don't inherit on EXEC
  652.             bits 5-0 drive number for disk files
  653.      07h    DWORD    pointer to device driver header if character device
  654.             else pointer to DOS Drive Parameter Block
  655.               (see #0742 at AH=32h)
  656.      0Bh    WORD    starting cluster of file
  657.      0Dh    WORD    file time in packed format (see #1005 at AX=5700h)
  658.             not used for character devices in DR DOS
  659.      0Fh    WORD    file date in packed format (see #1006 at AX=5700h)
  660.             not used for character devices in DR DOS
  661.      11h    DWORD    file size
  662.     ---system file table---
  663.      15h    DWORD    current offset in file (may be larger than size of
  664.               file; INT 21/AH=42h does not check new position)
  665.     ---FCB table---
  666.      15h    WORD    counter for last I/O to FCB
  667.      17h    WORD    counter for last open of FCB
  668.             (these are separate to determine the times of the
  669.               latest I/O and open)
  670.     ---
  671.      19h    WORD    relative cluster within file of last cluster accessed
  672.      1Bh    WORD    absolute cluster number of last cluster accessed
  673.             0000h if file never read or written???
  674.      1Dh    WORD    number of sector containing directory entry
  675.             (see #0700)
  676.      1Fh    BYTE    number of dir entry within sector (byte offset/32)
  677.      20h 11 BYTEs    filename in FCB format (no path/period, blank-padded)
  678.      2Bh    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  679.      2Fh    WORD    (SHARE.EXE) network machine number which opened file
  680.             (Windows Enhanced mode DOSMGR uses the virtual machine
  681.               ID as the machine number; see INT 2F/AX=1683h)
  682.      31h    WORD    PSP segment of file's owner (see #0725 at AH=26h)
  683.               (first three entries for AUX/CON/PRN contain segment
  684.               of IO.SYS startup code)
  685.      33h    WORD    offset within SHARE.EXE code segment of
  686.               sharing record (see #0978) 0000h = none
  687. SeeAlso: #0980,#0981,#0983
  688.  
  689. Format of DOS 4.0-6.0 system file tables and FCB tables:
  690. Offset    Size    Description    (Table 0983)
  691.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  692.  04h    WORD    number of files in this table
  693.  06h  3Bh bytes per file
  694.     Offset    Size    Description
  695.      00h    WORD    number of file handles referring to this file
  696.             FFFFh if in use but not referenced
  697.      02h    WORD    file open mode (see AX=6C00h,#0749 at AH=3Dh)
  698.             bit 15 set if this file opened via FCB
  699.      04h    BYTE    file attribute (see #0765 at AX=4301h)
  700.      05h    WORD    device info word (see also #0768 at AX=4400h)
  701.             bit 15 set if remote file
  702.             bit 14 set means do not set file date/time on closing
  703.             bit 13 set if named pipe
  704.             bit 12 set if no inherit
  705.             bit 11 set if network spooler
  706.             bit 7  set if device, clear if file (only if local)
  707.             bits 6-0 as for AX=4400h
  708.      07h    DWORD    pointer to device driver header if character device
  709.             else pointer to DOS Drive Parameter Block
  710.               (see #0742 at AH=32h) or REDIR data
  711.      0Bh    WORD    starting cluster of file (local files only)
  712.      0Dh    WORD    file time in packed format (see #1005)
  713.      0Fh    WORD    file date in packed format (see #1006)
  714.      11h    DWORD    file size
  715.      15h    DWORD    current offset in file (SFT)
  716.             LRU counters (FCB table, two WORDs)
  717.     ---local file---
  718.      19h    WORD    relative cluster within file of last cluster accessed
  719.      1Bh    DWORD    number of sector containing directory entry
  720.      1Fh    BYTE    number of dir entry within sector (byte offset/32)
  721.     ---network redirector---
  722.      19h    DWORD    pointer to REDIRIFS record
  723.      1Dh  3 BYTEs    ???
  724.     ------
  725.      20h 11 BYTEs    filename in FCB format (no path/period, blank-padded)
  726.      2Bh    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  727.      2Fh    WORD    (SHARE.EXE) network machine number which opened file
  728.             (Windows Enhanced mode DOSMGR uses the virtual machine
  729.               ID as the machine number; see INT 2F/AX=1683h)
  730.      31h    WORD    PSP segment of file's owner (see #0725 at AH=26h)
  731.               (first three entries for AUX/CON/PRN contain segment
  732.               of IO.SYS startup code)
  733.      33h    WORD    offset within SHARE.EXE code segment of
  734.             sharing record (see #0936)  0000h = none
  735.      35h    WORD    (local) absolute cluster number of last clustr accessed
  736.             (redirector) ???
  737.      37h    DWORD    pointer to IFS driver for file, 0000000h if native DOS
  738. Note:    the OS/2 2.0 DOS Boot Session does not properly fill in the filename
  739.       field due to incomplete support for SFTs; the OS/2 2.0 DOS Window
  740.       does not appear to support SFTs at all
  741. SeeAlso: #0980,#0981,#0982
  742.  
  743. Format of current directory structure (CDS) (array, LASTDRIVE entries):
  744. Offset    Size    Description    (Table 0984)
  745.  00h 67 BYTEs    ASCIZ path in form X:\PATH (local) or UNC form
  746.           \\SERVER\PATH (network, see notes below)
  747.  43h    WORD    drive attributes (also see note below) (see also AX=5F07h)
  748.         bit 15: uses network redirector     \ invalid if 00, installable
  749.         bit 14: physical drive         / file system if 11
  750.         bit 13: JOIN'ed      \ path above is true path that would be
  751.         bit 12: SUBST'ed  / needed if not under SUBST or JOIN
  752.         bit  7: remote drive hidden from redirector's assign-list and
  753.               exempt from network connection make/break commands;
  754.               set for CD-ROM drives by MSCDEX (not supported by
  755.               CORELCDX)
  756.  45h    DWORD    pointer to Drive Parameter Block for drive
  757.           (see #0742 at AH=32h)
  758. ---local drives---
  759.  49h    WORD    starting cluster of current directory
  760.         0000h = root, FFFFh = never accessed
  761.  4Bh    WORD    ??? seems to be FFFFh always
  762.  4Dh    WORD    ??? seems to be FFFFh always
  763. ---network drives---
  764.  49h    DWORD    pointer to redirector or REDIRIFS record, or FFFFh:FFFFh
  765.         (DOS 4 only) available for use by IFS driver
  766.  4Dh    WORD    stored user data from INT 21/AX=5F03h
  767. ------
  768.  4Fh    WORD    offset in current directory path of backslash corresponding to
  769.           root directory for drive
  770.         this value specifies how many characters to hide from the
  771.           "CHDIR" and "GETDIR" calls; normally set to 2 to hide the
  772.           drive letter and colon, SUBST, JOIN, and networks change it
  773.           so that only the appropriate portion of the true path is
  774.           visible to the user
  775. ---DOS 4.0+ ---
  776.  51h    BYTE    (DOS 4 only, remote drives) device type
  777.         04h network drive
  778.  52h    DWORD    pointer to IFS driver (DOS 4) or redirector block (DOS 5+) for
  779.           this drive, 00000000h if native DOS
  780.  56h    WORD    available for use by IFS driver
  781. Notes:    the path for invalid drives is normally set to X:\, but may be empty
  782.       after JOIN x: /D in DR DOS 5.0 or NET USE x: /D in older LAN versions
  783.     normally, only one of bits 13&12 may be set together with bit 14, but
  784.       DR DOS 5.0 uses other combinations for bits 15-12: 0111 JOIN,
  785.       0001 SUBST, 0101 ASSIGN (see #0985)
  786.     Windows for Workgroups 3.11 network sets the path to the local
  787.       drive and directory even for network drives; in that case the
  788.       UNC form \\SERVER\SHARE can be obtained with INT 21/AX=5F02h
  789.       or INT 21/AX=5F46h. LapLink RemoteAccess does the same even for
  790.       INT 21/AX=5F02h
  791.     SoftWindows on the Macintosh PowerPC sets \\E for the host drive
  792. SeeAlso: #0985,INT 21/AX=71AAh/BL=00h
  793.  
  794. Format of DR DOS 5.0-6.0 current directory structure entry (array):
  795. Offset    Size    Description    (Table 0985)
  796.  00h 67 BYTEs    ASCIZ pathname of actual root directory for this logical drive
  797.  43h    WORD    drive attributes
  798.         1000h SUBSTed drive
  799.         3000h??? JOINed drive
  800.         4000h physical drive
  801.         5000h ASSIGNed drive
  802.         7000h JOINed drive
  803.         8000h network drive
  804.  45h    BYTE    physical drive number (0=A:) if this logical drive is valid
  805.  46h    BYTE    ??? apparently flags for JOIN and ASSIGN
  806.  47h    WORD    cluster number of start of parent directory (0000h = root)
  807.  49h    WORD    entry number of current directory in parent directory
  808.  4Bh    WORD    cluster number of start of current directory
  809.  4Dh    WORD    used for media change detection (details not available)
  810.  4Fh    WORD    cluster number of SUBST/JOIN "root" directory
  811.         0000h if physical root directory
  812. SeeAlso: #0984
  813.  
  814. Format of Windows NT Current Directory Structure (CDS) (array):
  815. Offset    Size    Description    (Table 0986)
  816.  00h 67 BYTEs    ASCIZ path in form X:\ (does not show either current directory
  817.           or network path)
  818.  43h  4 BYTEs    ???
  819. Note:    the WinNT CDS contains only as many entries as there are local drives,
  820.       not LASTDRIVE entries.
  821.  
  822. Format of DOS device driver header:
  823. Offset    Size    Description    (Table 0987)
  824.  00h    DWORD    pointer to next driver, offset=FFFFh if last driver
  825.  04h    WORD    device attributes (see #0988,#0989)
  826.  06h    WORD    device strategy entry point
  827.         call with ES:BX -> request header
  828.           (see #1931 at INT 2F/AX=0802h)
  829.  08h    WORD    device interrupt entry point
  830. ---character device---
  831.  0Ah  8 BYTEs    blank-padded character device name
  832. ---block device---
  833.  0Ah    BYTE    number of subunits (drives) supported by driver
  834.  0Bh  7 BYTEs    normally unused; sometimes contains signature to indicate
  835.           specific drivers:
  836.         "$PCMATA"   PCMCIA driver PCMATA.SYS (see AX=440Dh"DOS 3.2+")
  837.         "AHADDVR"   Adaptec SCSI disk driver ASPIDISK.SYS
  838.         "DBLSPAC"   MS DoubleSpace or DriveSpace
  839.         "DSKREET"   NortonUtils v5+ Diskreet (see INT 2F/AX=FE00h)
  840.         "GFS    "   LapLink III device driver DD.BIN
  841.         "SIDExxx"   PCMCIA driver ATADRV.EXE (see AX=440Dh"DOS 3.2+")
  842.         "STAC-CD"   Stacker/Stacker Anywhere (see AX=4404h"Stacker")
  843. ---DoubleSpace/DriveSpace---
  844.  12h  2 BYTEs    signature ",." (2Ch 2Eh)
  845.  14h    var    preloading API entry point
  846. ---CD-ROM---
  847.  12h    WORD    reserved, must be 0000h
  848.         appears to be another device chain
  849.  14h    BYTE    drive letter (must initially be 00h; this byte is set by
  850.           MSCDEX when it loads)
  851.  15h    BYTE    number of units
  852.  16h  6 BYTEs    signature 'MSCDnn' where 'nn' is version (currently '00')
  853. SeeAlso: #1886 at INT 25/AX=CDCDh,#2124 at INT 2F/AX=5600h
  854.  
  855. Bitfields for device attributes (character device):
  856. Bit(s)    Description    (Table 0988)
  857.  15    set (indicates character device)
  858.  14    IOCTL supported (see AH=44h)
  859.  13    (DOS 3.0+) output until busy supported
  860.  12    reserved
  861.  11    (DOS 3.0+) OPEN/CLOSE/RemMedia calls supported
  862.  10-8    reserved
  863.  7    (DOS 5.0+) Generic IOCTL check call supported (driver command 19h)
  864.     (see AX=4410h,AX=4411h)
  865.  6    (DOS 3.2+) Generic IOCTL call supported (driver command 13h)
  866.     (see AX=440Ch,AX=440Dh"DOS 3.2+")
  867.  5    reserved
  868.  4    device is special (use INT 29 "fast console output")
  869.  3    device is CLOCK$ (all reads/writes use transfer record described
  870.       below)
  871.  2    device is NUL
  872.  1    device is standard output
  873.  0    device is standard input
  874. Note:    for European MS-DOS 4.0, bit 11 also indicates that bits 8-6 contain a
  875.       version code (000 = DOS 3.0,3.1; 001 = DOS 3.2;
  876.       010 = European DOS 4.0)
  877. SeeAlso: #0989,#0987
  878.  
  879. Bitfields for device attributes (block device):
  880. Bit(s)    Description    (Table 0989)
  881.  15    clear (indicates block device)
  882.  14    IOCTL supported
  883.  13    non-IBM format
  884.  12    network device (device is remote)
  885.  11    (DOS 3.0+) OPEN/CLOSE/RemMedia calls supported
  886.  10    reserved
  887.  9    direct I/O not allowed??? (set by DOS 3.3 DRIVER.SYS for "new" drives)
  888.  8    ??? set by DOS 3.3 DRIVER.SYS for "new" drives
  889.  7    (DOS 5.0+) Generic IOCTL check call supported (driver command 19h)
  890.     (see AX=4410h,AX=4411h)
  891.  6    (DOS 3.2+) Generic IOCTL call supported (driver command 13h)
  892.     implies support for commands 17h and 18h
  893.       (see AX=440Ch,AX=440Dh"DOS 3.2+",AX=440Eh,AX=440Fh)
  894.  5-2    reserved
  895.  1    driver supports 32-bit sector addressing (DOS 3.31+)
  896.  0     reserved
  897. Note:    for European MS-DOS 4.0, bit 11 also indicates that bits 8-6 contain a
  898.       version code (000 = DOS 3.0,3.1; 001 = DOS 3.2;
  899.       010 = European DOS 4.0)
  900. SeeAlso: #0988,#0987
  901.  
  902. Format of DOS 2.x disk buffer:
  903. Offset    Size    Description    (Table 0990)
  904.  00h    DWORD    pointer to next disk buffer, offset = FFFFh if last
  905.         least-recently used buffer is first in chain
  906.  04h    BYTE    drive (0=A, 1=B, etc), FFh if not in use
  907.  05h  3 BYTEs    unused??? (seems always to be 00h 00h 01h)
  908.  08h    WORD    logical sector number
  909.  0Ah    BYTE    number of copies to write (1 for non-FAT sectors)
  910.  0Bh    BYTE    sector offset between copies if multiple copies to be written
  911.  0Ch    DWORD    pointer to DOS Drive Parameter Block (see #0742 at AH=32h)
  912.  10h        buffered data
  913. SeeAlso: #0991,#0993,#0994,#0996
  914.  
  915. Format of DOS 3.x disk buffer:
  916. Offset    Size    Description    (Table 0991)
  917.  00h    DWORD    pointer to next disk buffer, offset = FFFFh if last
  918.         least-recently used buffer is first in chain
  919.  04h    BYTE    drive (0=A,1=B, etc), FFh if not in use
  920.  05h    BYTE    buffer flags (see #0992)
  921.  06h    WORD    logical sector number
  922.  08h    BYTE    number of copies to write (1 for non-FAT sectors)
  923.  09h    BYTE    sector offset between copies if multiple copies to be written
  924.  0Ah    DWORD    pointer to DOS Drive Parameter Block (see #0742 at AH=32h)
  925.  0Eh    WORD    unused??? (almost always 0)
  926.  10h        buffered data
  927. SeeAlso: #0990,#0993,#0994,#0996
  928.  
  929. Bitfields for DOS 3.x disk buffer flags:
  930. Bit(s)    Description    (Table 0992)
  931.  7    ???
  932.  6    buffer dirty
  933.  5    buffer has been referenced
  934.  4    ???
  935.  3    sector in data area
  936.  2    sector in a directory, either root or subdirectory
  937.  1    sector in FAT
  938.  0    boot sector??? (guess)
  939. SeeAlso: #0997
  940.  
  941. Format of DOS 4.00 (pre UR 25066) disk buffer info:
  942. Offset    Size    Description    (Table 0993)
  943.  00h    DWORD    pointer to array of disk buffer hash chain heads (see #0995)
  944.  04h    WORD    number of disk buffer hash chains (referred to as NDBCH below)
  945.  06h    DWORD    pointer to lookahead buffer, zero if not present
  946.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  947.  0Ch    BYTE    00h if buffers in EMS (/X), FFh if not
  948.  0Dh    WORD    EMS handle for buffers, zero if not in EMS
  949.  0Fh    WORD    EMS physical page number used for buffers (usually 255)
  950.  11h    WORD    ??? seems always to be 0001h
  951.  13h    WORD    segment of EMS physical page frame
  952.  15h    WORD    ??? seems always to be zero
  953.  17h  4 WORDs    EMS partial page mapping information???
  954. SeeAlso: #0990,#0991,#0994,#0998
  955.  
  956. Format of DOS 4.01 (from UR 25066 Corrctive Services Disk on) disk buffer info:
  957. Offset    Size    Description    (Table 0994)
  958.  00h    DWORD    pointer to array of disk buffer hash chain heads (see #0995)
  959.  04h    WORD    number of disk buffer hash chains (referred to as NDBCH below)
  960.  06h    DWORD    pointer to lookahead buffer, zero if not present
  961.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  962.  0Ch    BYTE    01h, possibly to distinguish from pre-UR 25066 format
  963.  0Dh    WORD    ??? EMS segment for BUFFERS (only with /XD)
  964.  0Fh    WORD    ??? EMS physical page number of EMS seg above (only with /XD)
  965.  11h    WORD    ??? EMS segment for ??? (only with /XD)
  966.  13h    WORD    ??? EMS physical page number of above (only with /XD)
  967.  15h    BYTE    ??? number of EMS page frames present (only with /XD)
  968.  16h    WORD    segment of one-sector workspace buffer allocated in main memory
  969.           if BUFFERS/XS or /XD options in effect, possibly to avoid DMA
  970.           into EMS
  971.  18h    WORD    EMS handle for buffers, zero if not in EMS
  972.  1Ah    WORD    EMS physical page number used for buffers (usually 255)
  973.  1Ch    WORD    ??? appears always to be 0001h
  974.  1Eh    WORD    segment of EMS physical page frame
  975.  20h    WORD    ??? appears always to be zero
  976.  22h    BYTE    00h if /XS, 01h if /XD, FFh if BUFFERS not in EMS
  977. SeeAlso: #0990,#0991,#0993,#0998
  978.  
  979. Format of DOS 4.x disk buffer hash chain head (array, one entry per chain):
  980. Offset    Size    Description    (Table 0995)
  981.  00h    WORD    EMS logical page number in which chain is resident, -1 if not
  982.           in EMS
  983.  02h    DWORD    pointer to least recently used buffer header.  All buffers on
  984.           this chain are in the same segment.
  985.  06h    BYTE    number of dirty buffers on this chain
  986.  07h    BYTE    reserved (00h)
  987. Notes:    buffered disk sectors are assigned to chain N where N is the sector's
  988.       address modulo NDBCH,     0 <= N <= NDBCH-1
  989.     each chain resides completely within one EMS page
  990.     this structure is in main memory even if buffers are in EMS
  991.  
  992. Format of DOS 4.0-6.0 disk buffer:
  993. Offset    Size    Description    (Table 0996)
  994.  00h    WORD    forward ptr, offset only, to next least recently used buffer
  995.  02h    WORD    backward pointer, offset only
  996.  04h    BYTE    drive (0=A,1=B, etc) if bit 7 clear
  997.         SFT index if bit 7 set
  998.         FFh if not in use
  999.  05h    BYTE    buffer flags (see #0997)
  1000.  06h    DWORD    logical sector number (local buffers only)
  1001.  0Ah    BYTE    number of copies to write
  1002.         for FAT sectors, same as number of FATs
  1003.         for data and directory sectors, usually 1
  1004.  0Bh    WORD    offset in sectors between copies to write for FAT sectors
  1005.  0Dh    DWORD    pointer to DOS Drive Parameter Block (see #0742 at AH=32h)
  1006.  11h    WORD    size of data in buffer if remote buffer (see also #0997)
  1007.  13h    BYTE    reserved (padding)
  1008.  14h        buffered data
  1009. Note:    for DOS 4.x, all buffered sectors which have the same hash value
  1010.       (computed as the sum of high and low words of the logical sector
  1011.       number divided by the number of disk buffer chains) are on the same
  1012.       doubly-linked circular chain; for DOS 5+, only a single circular
  1013.       chain exists.
  1014.     the links consist of offset addresses only, the segment being the same
  1015.       for all buffers in the chain.
  1016. SeeAlso: #0990,#0991,#0993
  1017.  
  1018. Bitfields for DOS 4.0-6.0 disk buffer flags:
  1019. Bit(s)    Description    (Table 0997)
  1020.  7    remote buffer
  1021.  6    buffer dirty
  1022.  5    buffer has been referenced (reserved in DOS 5+)
  1023.  4    search data buffer (only valid if remote buffer)
  1024.  3    sector in data area
  1025.  2    sector in a directory, either root or subdirectory
  1026.  1    sector in FAT
  1027.  0    reserved
  1028. SeeAlso: #0992
  1029.  
  1030. Format of DOS 5.0-6.0 disk buffer info:
  1031. Offset    Size    Description    (Table 0998)
  1032.  00h    DWORD    pointer to least-recently-used buffer header (may be in HMA)
  1033.         (see #0996)
  1034.  04h    WORD    number of dirty disk buffers
  1035.  06h    DWORD    pointer to lookahead buffer, zero if not present
  1036.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  1037.  0Ch    BYTE    buffer location
  1038.         00h base memory, no workspace buffer
  1039.         01h HMA, workspace buffer in base memory
  1040.  0Dh    DWORD    pointer to one-segment workspace buffer in base memory
  1041.  11h  3 BYTEs    unused
  1042.  14h    WORD    ???
  1043.  16h    BYTE    flag: INT 24 fail while making an I/O status call
  1044.  17h    BYTE    temp storage for user memory allocation strategy during EXEC
  1045.  18h    BYTE    counter: number of INT 21 calls for which A20 is off
  1046.  19h    BYTE    bit flags
  1047.         bit 0: ???
  1048.         bit 1: SWITCHES=/W specified in CONFIG.SYS (don't load
  1049.             WINA20.SYS when MS Windows 3.0 starts)
  1050.         bit 2: in EXEC state (INT 21/AX=4B05h)
  1051.  1Ah    WORD    offset of unpack code start (used only during INT 21/AX=4B05h)
  1052.  1Ch    BYTE    bit 0 set iff UMB MCB chain linked to normal MCB chain
  1053.  1Dh    WORD    minimum paragraphs of memory required by program being EXECed
  1054.  1Fh    WORD    segment of first MCB in upper memory blocks or FFFFh if DOS
  1055.           memory chain in base 640K only (first UMB MCB usually at
  1056.           9FFFh, locking out video memory with a DOS-owned memory
  1057.           block)
  1058.         the MCB this word points at contains a valid link into high
  1059.           memory even if it is marked with a 'Z' indicating the last
  1060.           memory block
  1061.  21h    WORD    paragraph from which to start scanning during memory allocation
  1062. SeeAlso: #0993,#0994
  1063.  
  1064. (Table 0999)
  1065. Call IFS utility function entry point with:
  1066.     AH = 20h miscellaneous functions
  1067.         AL = 00h get date
  1068.         Return: CX = year
  1069.             DH = month
  1070.             DL = day
  1071.         AL = 01h get process ID and computer ID
  1072.         Return: BX = current PSP segment
  1073.             DX = active network machine number
  1074.         AL = 05h get file system info
  1075.         ES:DI -> 16-byte info buffer
  1076.         Return: buffer filled
  1077.             Offset    Size    Description
  1078.              00h  2 BYTEs    unused
  1079.              02h    WORD    number of SFTs (actually counts only
  1080.                     the first two file table arrays)
  1081.              04h    WORD    number of FCB table entries
  1082.              06h    WORD    number of proctected FCBs
  1083.              08h  6 BYTEs    unused
  1084.              0Eh    WORD    largest sector size supported
  1085.         AL = 06h get machine name
  1086.         ES:DI -> 18-byte buffer for name
  1087.         Return: buffer filled with name starting at offset 02h
  1088.         AL = 08h get sharing retry count
  1089.         Return: BX = sharing retry count
  1090.         AL = other
  1091.         Return: CF set
  1092.     AH = 21h get redirection state
  1093.         BH = type (03h disk, 04h printer)
  1094.         Return: BH = state (00h off, 01h on)
  1095.     AH = 22h ??? some sort of time calculation
  1096.         AL = 00h ???
  1097.             nonzero ???
  1098.     AH = 23h ??? some sort of time calculation
  1099.     AH = 24h compare filenames
  1100.         DS:SI -> first ASCIZ filename
  1101.         ES:DI -> second ASCIZ filename
  1102.         Return: ZF set if files are same ignoring case and / vs \
  1103.     AH = 25h normalize filename
  1104.         DS:SI -> ASCIZ filename
  1105.         ES:DI -> buffer for result
  1106.         Return: filename uppercased, forward slashes changed to backslashes
  1107.     AH = 26h get DOS stack
  1108.         Return: DS:SI -> top of stack
  1109.             CX = size of stack in bytes
  1110.     AH = 27h increment InDOS flag
  1111.     AH = 28h decrement InDOS flag
  1112. Note:    IFS drivers which do not wish to implement functions 20h or 24h-28h may
  1113.       pass them on to the default handler pointed at by [LoL+37h]
  1114. SeeAlso: #1000,#1001
  1115.  
  1116. Format of IFS driver list:
  1117. Offset    Size    Description    (Table 1000)
  1118.  00h    DWORD    pointer to next driver header
  1119.  04h  8 BYTEs    IFS driver name (blank padded), as used by FILESYS command
  1120.  0Ch  4 BYTEs    ???
  1121.  10h    DWORD    pointer to IFS utility function entry point (see #0999)
  1122.         call with ES:BX -> IFS request (see #1001)
  1123.  14h    WORD    offset in header's segment of driver entry point
  1124.     ???
  1125. SeeAlso: #0999,#1001
  1126.  
  1127. Format of IFS request block:
  1128. Offset    Size    Description    (Table 1001)
  1129.  00h    WORD    total size in bytes of request
  1130.  02h    BYTE    class of request
  1131.         02h ???
  1132.         03h redirection
  1133.         04h ???
  1134.         05h file access
  1135.         06h convert error code to string
  1136.         07h ???
  1137.  03h    WORD    returned DOS error code
  1138.  05h    BYTE    IFS driver exit status
  1139.         00h success
  1140.         01h ???
  1141.         02h ???
  1142.         03h ???
  1143.         04h ???
  1144.         FFh internal failure
  1145.  06h 16 BYTEs    ???
  1146. ---request class 02h---
  1147.  16h    BYTE    function code
  1148.         04h ???
  1149.  17h    BYTE    unused???
  1150.  18h    DWORD    pointer to ???
  1151.  1Ch    DWORD    pointer to ???
  1152.  20h  2 BYTEs    ???
  1153. ---request class 03h---
  1154.  16h    BYTE    function code
  1155.  17h    BYTE    ???
  1156.  18h    DWORD    pointer to ???
  1157.  1Ch    DWORD    pointer to ???
  1158.  22h    WORD    returned ???
  1159.  24h    WORD    returned ???
  1160.  26h    WORD    returned ???
  1161.  28h    BYTE    returned ???
  1162.  29h    BYTE    unused???
  1163. ---request class 04h---
  1164.  16h    DWORD    pointer to ???
  1165.  1Ah    DWORD    pointer to ???
  1166. ---request class 05h---
  1167.  16h    BYTE    function code
  1168.         01h flush disk buffers
  1169.         02h get disk space
  1170.         03h MKDIR
  1171.         04h RMDIR
  1172.         05h CHDIR
  1173.         06h delete file
  1174.         07h rename file
  1175.         08h search directory
  1176.         09h file open/create
  1177.         0Ah LSEEK
  1178.         0Bh read from file
  1179.         0Ch write to file
  1180.         0Dh lock region of file
  1181.         0Eh commit/close file
  1182.         0Fh get/set file attributes
  1183.         10h printer control
  1184.         11h ???
  1185.         12h process termination
  1186.         13h ???
  1187.     ---class 05h function 01h---
  1188.      17h  7 BYTEs    ???
  1189.      1Eh    DWORD    pointer to ???
  1190.      22h  4 BYTEs    ???
  1191.      26h    BYTE    ???
  1192.      27h    BYTE    ???
  1193.     ---class 05h function 02h---
  1194.      17h  7 BYTEs    ???
  1195.      1Eh    DWORD    pointer to ???
  1196.      22h  4 BYTEs    ???
  1197.      26h    WORD    returned total clusters
  1198.      28h    WORD    returned sectors per cluster
  1199.      2Ah    WORD    returned bytes per sector
  1200.      2Ch    WORD    returned available clusters
  1201.      2Eh    BYTE    returned ???
  1202.      2Fh    BYTE    ???
  1203.     ---class 05h functions 03h,04h,05h---
  1204.      17h  7 BYTEs    ???
  1205.      1Eh    DWORD    pointer to ???
  1206.      22h  4 BYTEs    ???
  1207.      26h    DWORD    pointer to directory name
  1208.     ---class 05h function 06h---
  1209.      17h  7 BYTEs    ???
  1210.      1Eh    DWORD    pointer to ???
  1211.      22h  4 BYTEs    ???
  1212.      26h    WORD    attribute mask
  1213.      28h    DWORD    pointer to filename
  1214.     ---class 05h function 07h---
  1215.      17h  7 BYTEs    ???
  1216.      1Eh    DWORD    pointer to ???
  1217.      22h  4 BYTEs    ???
  1218.      26h    WORD    attribute mask
  1219.      28h    DWORD    pointer to source filespec
  1220.      2Ch    DWORD    pointer to destination filespec
  1221.     ---class 05h function 08h---
  1222.      17h  7 BYTEs    ???
  1223.      1Eh    DWORD    pointer to ???
  1224.      22h  4 BYTEs    ???
  1225.      26h    BYTE    00h FINDFIRST
  1226.             01h FINDNEXT
  1227.      28h    DWORD    pointer to FindFirst search data + 01h if FINDNEXT
  1228.      2Ch    WORD    search attribute if FINDFIRST
  1229.      2Eh    DWORD    pointer to filespec if FINDFIRST
  1230.     ---class 05h function 09h---
  1231.      17h  7 BYTEs    ???
  1232.      1Eh    DWORD    pointer to ???
  1233.      22h    DWORD    pointer to IFS open file structure (see #1002)
  1234.      26h    WORD    ???  \ together, specify open vs. create, whether or
  1235.      28h    WORD    ???  / not to truncate
  1236.      2Ah  4 BYTEs    ???
  1237.      2Eh    DWORD    pointer to filename
  1238.      32h  4 BYTEs    ???
  1239.      36h    WORD    file attributes on call
  1240.             returned ???
  1241.      38h    WORD    returned ???
  1242.     ---class 05h function 0Ah---
  1243.      17h  7 BYTEs    ???
  1244.      1Eh    DWORD    pointer to ???
  1245.      22h    DWORD    pointer to IFS open file structure (see #1002)
  1246.      26h    BYTE    seek type (02h = from end)
  1247.      28h    DWORD    offset on call
  1248.             returned new absolute position
  1249.     ---class 05h functions 0Bh,0Ch---
  1250.      17h  7 BYTEs    ???
  1251.      1Eh    DWORD    pointer to ???
  1252.      22h    DWORD    pointer to IFS open file structure (see #1002)
  1253.      28h    WORD    number of bytes to transfer
  1254.             returned bytes actually transferred
  1255.      2Ah    DWORD    transfer address
  1256.     ---class 05h function 0Dh---
  1257.      17h  7 BYTEs    ???
  1258.      1Eh    DWORD    pointer to ???
  1259.      22h    DWORD    pointer to IFS open file structure (see #1002)
  1260.      26h    BYTE    file handle???
  1261.      27h    BYTE    unused???
  1262.      28h    WORD    ???
  1263.      2Ah    WORD    ???
  1264.      2Ch    WORD    ???
  1265.      2Eh    WORD    ???
  1266.     ---class 05h function 0Eh---
  1267.      17h  7 BYTEs    ???
  1268.      1Eh    DWORD    pointer to ???
  1269.      22h    DWORD    pointer to IFS open file structure (see #1002)
  1270.      26h    BYTE    00h commit file
  1271.             01h close file
  1272.      27h    BYTE    unused???
  1273.     ---class 05h function 0Fh---
  1274.      17h  7 BYTEs    ???
  1275.      1Eh    DWORD    pointer to ???
  1276.      22h  4 BYTEs    ???
  1277.      26h    BYTE    02h GET attributes
  1278.             03h PUT attributes
  1279.      27h    BYTE    unused???
  1280.      28h 12 BYTEs    ???
  1281.      34h    WORD    search attributes???
  1282.      36h    DWORD    pointer to filename
  1283.      3Ah    WORD    (GET) returned ???
  1284.      3Ch    WORD    (GET) returned ???
  1285.      3Eh    WORD    (GET) returned ???
  1286.      40h    WORD    (GET) returned ???
  1287.      42h    WORD    (PUT) new attributes
  1288.             (GET) returned attributes
  1289.     ---class 05h function 10h---
  1290.      17h  7 BYTEs    ???
  1291.      1Eh    DWORD    pointer to ???
  1292.      22h    DWORD    pointer to IFS open file structure (see #1002)
  1293.      26h    WORD    ???
  1294.      28h    DWORD    pointer to ???
  1295.      2Ch    WORD    ???
  1296.      2Eh    BYTE    ???
  1297.      2Fh    BYTE    subfunction
  1298.             01h get printer setup
  1299.             03h ???
  1300.             04h ???
  1301.             05h ???
  1302.             06h ???
  1303.             07h ???
  1304.             21h set printer setup
  1305.     ---class 05h function 11h---
  1306.      17h  7 BYTEs    ???
  1307.      1Eh    DWORD    pointer to ???
  1308.      22h    DWORD    pointer to IFS open file structure (see #1002)
  1309.      26h    BYTE    subfunction
  1310.      27h    BYTE    unused???
  1311.      28h    WORD    ???
  1312.      2Ah    WORD    ???
  1313.      2Ch    WORD    ???
  1314.      2Eh    BYTE    ???
  1315.      2Fh    BYTE    ???
  1316.     ---class 05h function 12h---
  1317.      17h 15 BYTEs    unused???
  1318.      26h    WORD    PSP segment
  1319.      28h    BYTE    type of process termination
  1320.      29h    BYTE    unused???
  1321.     ---class 05h function 13h---
  1322.      17h 15 BYTEs    unused???
  1323.      26h    WORD    PSP segment
  1324. ---request class 06h---
  1325.  16h    DWORD    returned pointer to string corresponding to error code at 03h
  1326.  1Ah    BYTE    returned ???
  1327.  1Bh    BYTE    unused
  1328. ---request class 07h---
  1329.  16h    DWORD    pointer to IFS open file structure (see #1002)
  1330.  1Ah    BYTE    ???
  1331.  1Bh    BYTE    unused???
  1332. SeeAlso: #1000,#0999,#1002
  1333.  
  1334. Format of IFS open file structure:
  1335. Offset    Size    Description    (Table 1002)
  1336.  00h    WORD    ???
  1337.  02h    WORD    device info word
  1338.  04h    WORD    file open mode
  1339.  06h    WORD    ???
  1340.  08h    WORD    file attributes
  1341.  0Ah    WORD    owner's network machine number
  1342.  0Ch    WORD    owner's PSP segment
  1343.  0Eh    DWORD    file size
  1344.  12h    DWORD    current offset in file
  1345.  16h    WORD    file time
  1346.  18h    WORD    file date
  1347.  1Ah 11 BYTEs    filename in FCB format
  1348.  25h    WORD    ???
  1349.  27h    WORD    hash value of SFT address
  1350.         (low word of linear address + segment&F000h)
  1351.  29h  3 WORDs    network info from SFT
  1352.  2Fh    WORD    ???
  1353.  
  1354. Format of one item in DOS 4.0+ list of special program names:
  1355. Offset    Size    Description    (Table 1003)
  1356.  00h    BYTE    length of name (00h = end of list)
  1357.  01h  N BYTEs    name in format name.ext
  1358.  N    2 BYTEs    DOS version to return for program (major,minor)
  1359.         (see AH=30h,INT 2F/AX=122Fh)
  1360. ---DOS 4 only---
  1361.  N+2    BYTE    number of times to return fake version number (FFh = always)
  1362. Note:    if the name of the executable for the program making the DOS "get
  1363.       version" call matches one of the names in this list, DOS returns the
  1364.       specified version rather than the true version number
  1365. --------v-215252-----------------------------
  1366. INT 21 - VIRUS - "516"/"Leapfrog" - INSTALLATION CHECK
  1367.     AX = 5252h
  1368. Return: BX = FFEEh if resident
  1369. SeeAlso: AX=4BFFh"Cascade",AX=58CCh
  1370. --------D-2153-------------------------------
  1371. INT 21 - DOS 2+ internal - TRANSLATE BIOS PARAMETER BLOCK TO DRIVE PARAM BLOCK
  1372.     AH = 53h
  1373.     DS:SI -> BIOS Parameter Block (see #1004)
  1374.     ES:BP -> buffer for Drive Parameter Block (see #0742 at AH=32h)
  1375. Return: ES:BP buffer filled
  1376. Notes:    for DOS 3.0+, the cluster at which to start searching is set to 0000h
  1377.       and the number of free clusters is set to FFFFh (unknown)
  1378.     if the number of sectors per cluster is set to zero, MS-DOS will hang
  1379.       at startup because it computes the internally-used shift count by
  1380.       shifting this value right until the carry flag is set; since this
  1381.       will never happen when the field is zero, MS-DOS hangs
  1382.     not supported by Windows NT 3.1
  1383.  
  1384. Format of BIOS Parameter Block:
  1385. Offset    Size    Description    (Table 1004)
  1386.  00h    WORD    number of bytes per sector
  1387.  02h    BYTE    number of sectors per cluster
  1388.  03h    WORD    number of reserved sectors at start of disk
  1389.  05h    BYTE    number of FATs
  1390.  06h    WORD    number of entries in root directory
  1391.  08h    WORD    total number of sectors
  1392.         for DOS 4.0+, set to zero if partition >32M, then set DWORD at
  1393.           15h to actual number of sectors
  1394.  0Ah    BYTE    media ID byte (see #0703)
  1395.  0Bh    WORD    number of sectors per FAT
  1396. ---DOS 2.13---
  1397.  0Dh    WORD    number of sectors per track
  1398.  0Fh    WORD    number of heads
  1399.  11h    WORD    number of hidden sectors
  1400. ---DOS 3.0+ ---
  1401.  0Dh    WORD    number of sectors per track
  1402.  0Fh    WORD    number of heads
  1403.  11h    DWORD    number of hidden sectors
  1404.  15h 11 BYTEs    reserved
  1405. ---DOS 4.0+ ---
  1406.  15h    DWORD    total number of sectors if word at 08h contains zero
  1407.  19h  6 BYTEs    ???
  1408.  1Fh    WORD    number of cylinders
  1409.  21h    BYTE    device type
  1410.  22h    WORD    device attributes (removable or not, etc)
  1411. ---DR DOS 5+ ---
  1412.  15h    DWORD    total number of sectors if word at 08h contains zero
  1413.  19h  6 BYTEs    reserved
  1414. ---European MS-DOS 4.00---
  1415.  15h    DWORD    total number of sectors if word at 08h contains zero
  1416.         (however, this DOS does not actually implement >32M partitions)
  1417. SeeAlso: #0742,#3300
  1418.  
  1419. Format of Extended BIOS Parameter Block:
  1420. Offset    Size    Description    (Table 3300)
  1421.  00h 25 BYTEs    same as standard DOS 4-6 BPB (see #1004)
  1422.  19h    DWORD    sectors per FAT if WORD at 0Bh is 0000h
  1423.  1Dh    WORD    extended flags
  1424.         bits 3-0: the 0-based FAT number of the active FAT
  1425.         bits 6-4: reserved (0)
  1426.         bit 7: do not mirror active FAT to inactive FATs
  1427.  1Fh    WORD    file system version (high byte=major, low byte=minor)
  1428.  21h    DWORD    starting cluster number of root directory
  1429.  25h    WORD    file system information sector number (see also #3296)
  1430.  29h  6 WORDs    reserved
  1431. SeeAlso: #0902
  1432. --------D-2154-------------------------------
  1433. INT 21 - DOS 2+ - GET VERIFY FLAG
  1434.     AH = 54h
  1435. Return: AL = verify flag
  1436.         00h off
  1437.         01h on (all disk writes verified after writing)
  1438. SeeAlso: AH=2Eh
  1439. --------v-2154--BX4475-----------------------
  1440. INT 21 - VIRUS - "Dual_GtM"/"Ganeu" - INSTALLATION CHECK
  1441.     AH = 54h
  1442.     BX = 4475h ("Du")
  1443.     CX = 616Ch ("al")
  1444. Return: BX = 4774h ("Gt") and CX = 4D21h ("M!") if resident
  1445. SeeAlso: AX=50FDh"VIRUS",AX=5454h"VIRUS"
  1446. --------v-215454-----------------------------
  1447. INT 21 - VIRUS - "Dudley" - INSTALLATION CHECK
  1448.     AX = 5454h
  1449. Return: AX = 0000h if resident
  1450. SeeAlso: AX=50FDh"VIRUS",AH=54h/BX=4475h"VIRUS",AX=7BCEh"VIRUS"
  1451. --------D-2155-------------------------------
  1452. INT 21 - DOS 2+ internal - CREATE CHILD PSP
  1453.     AH = 55h
  1454.     DX = segment at which to create new PSP
  1455.     SI = (DOS 3.0+) value to place in memory size field at DX:[0002h]
  1456. Return: AL destroyed
  1457. Notes:    creates a "child" PSP rather than making an exact copy of the current
  1458.       PSP; the new PSP's parent pointer is set to the current PSP and the
  1459.       reference count for each inherited file is incremented
  1460.     (DOS 2.0+) sets current PSP to DX
  1461.     (DOS 3.0+) marks "no inherit" file handles as closed in child PSP
  1462.     this function is implemented using the same code as AH=26h, so unlike
  1463.       other DOS 2+ functions, it does not return status in CF, instead
  1464.       returning status in AL as DOS 1.x functions do (but it never puts an
  1465.       explicit return value in AL)
  1466. SeeAlso: AH=26h,AH=50h
  1467. --------D-2156-------------------------------
  1468. INT 21 - DOS 2+ - "RENAME" - RENAME FILE
  1469.     AH = 56h
  1470.     DS:DX -> ASCIZ filename of existing file (no wildcards, but see below)
  1471.     ES:DI -> ASCIZ new filename (no wildcards)
  1472.     CL = attribute mask (server call only, see below)
  1473. Return: CF clear if successful
  1474.     CF set on error
  1475.         AX = error code (02h,03h,05h,11h) (see #1020)
  1476. Notes:    allows move between directories on same logical volume
  1477.     this function does not set the archive attribute
  1478.       (see #0765 at AX=4301h), which results in incremental backups not
  1479.       backing up the file under its new name
  1480.     open files should not be renamed
  1481.     (DOS 2.x only) this function renames file by creating a new directory
  1482.       entry with the new name,then marking the old entry deleted
  1483.     (DOS 3.0+) allows renaming of directories
  1484.     (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
  1485.       error 12h (no more files) is returned on success, and both source and
  1486.       destination specs must be canonical (as returned by AH=60h).
  1487.       Wildcards in the destination are replaced by the corresponding char
  1488.       of each source file being renamed.  Under DOS 3.x, the call will fail
  1489.       if the destination wildcard is *.* or equivalent; under DR DOS 5.0,
  1490.       the call will fail if any wildcards are used.     When invoked via
  1491.       AX=5D00h, only those files matching the attribute mask in CL are
  1492.       renamed.
  1493.     under the FlashTek X-32 DOS extender, the old-name pointer is in DS:EDX
  1494.       and the new-name pointer is in ES:EDI (DS must equal ES)
  1495. BUG:    (DR DOS 3.41) when invoked via AX=5D00h, this function will generate
  1496.       a new directory entry with the new name (including any wildcards)
  1497.       which can only be removed with a sector editor
  1498. SeeAlso: AH=17h,AX=4301h,AX=5D00h,AH=60h,AH=71h,AX=F257h/SF=04h
  1499. --------v-215643------------------------
  1500. INT 21 - VIRUS - "PS-MPC.Gold" - INSTALLATION CHECK
  1501.     AX = 5643h  ('VC')
  1502. Return: AX = 5053h  ('PS') if resident
  1503. SeeAlso: AX=33E0h"VIRUS",AX=5741h"VIRUS",AX=6303h"VIRUS"
  1504. --------D-215700-----------------------------
  1505. INT 21 - DOS 2+ - GET FILE'S LAST-WRITTEN DATE AND TIME
  1506.     AX = 5700h
  1507.     BX = file handle
  1508. Return: CF clear if successful
  1509.         CX = file's time (see #1005)
  1510.         DX = file's date (see #1006)
  1511.     CF set on error
  1512.         AX = error code (01h,06h) (see #1020)
  1513. Note:    under DR DOS 3.41 and 5.0, this function returns 0 (no date/time) for
  1514.       character devices; MS-DOS returns date and time of opening
  1515. SeeAlso: AX=5701h,AX=5704h"Windows95"
  1516.  
  1517. Bitfields for file time:
  1518. Bit(s)    Description    (Table 1005)
  1519.  15-11    hours (0-23)
  1520.  10-5    minutes
  1521.  4-0    seconds/2
  1522.  
  1523. Bitfields for file date:
  1524. Bit(s)    Description    (Table 1006)
  1525.  15-9    year - 1980
  1526.  8-5    month
  1527.  4-0    day
  1528. --------D-215701-----------------------------
  1529. INT 21 - DOS 2+ - SET FILE'S LAST-WRITTEN DATE AND TIME
  1530.     AX = 5701h
  1531.     BX = file handle
  1532.     CX = new time (see #1005)
  1533.     DX = new date (see #1006)
  1534. Return: CF clear if successful
  1535.     CF set on error
  1536.         AX = error code (01h,06h) (see #1020)
  1537. SeeAlso: AX=5700h,AX=5705h"Windows95",AX=5707h"Windows95"
  1538. --------D-215702-----------------------------
  1539. INT 21 - DOS 4.x only - GET EXTENDED ATTRIBUTES FOR FILE
  1540.     AX = 5702h
  1541.     BX = file handle
  1542.     CX = size of result buffer or 0000h
  1543.     DS:SI -> EAP list (see #1007)
  1544.     ES:DI -> buffer for returned EAV list (see #1010)
  1545. Return: CF clear if successful
  1546.         CX = size of returned data
  1547.     CF set on error
  1548.         AX = error code (see #1020)
  1549. Desc:    get the current value of one or more extended attributes
  1550. Notes:    if CX=0000h on entry, ES:DI is ignored and no data is actually
  1551.       returned, only the amount of data which is available
  1552.     the default DOS 4 behavior is to return a single word of 0000h (no
  1553.       structures) in the result buffer if CX>=0002h on entry; this
  1554.       functionality was apparently never released to the public
  1555. SeeAlso: AX=5703h,AX=5704h,AH=6Eh,INT 2F/AX=112Dh
  1556.  
  1557. Format of EAP (extended attribute properties) list:
  1558. Offset    Size    Description    (Table 1007)
  1559.  00h    WORD    number of EAP structures following
  1560.  02h    var    array of EAP structures (see #1008)
  1561. SeeAlso: #1010
  1562.  
  1563. Format of EAP (extended attribute property) structure:
  1564. Offset    Size    Description    (Table 1008)
  1565.  00h    BYTE    attribute type
  1566.         01h boolean (either 00h or 01h)
  1567.         02h number (BYTE, WORD, or DWORD)
  1568.         03h string
  1569.         04h date stamp
  1570.         05h time stamp
  1571.  01h    WORD    EAP flags (see #1009)
  1572.  03h    BYTE    size of reference string (name)
  1573.  04h  N BYTEs    reference string
  1574.  
  1575. Bitfields for EAP flags:
  1576. Bit(s)    Description    (Table 1009)
  1577.  12    unchangeable
  1578.  13    ignore
  1579.  14    unchangeable
  1580.  15    used by COMMAND.COM for code page, but not understood by ATTRIB
  1581.  
  1582. Format of EAV (extended attribute value) list:
  1583. Offset    Size    Description    (Table 1010)
  1584.  00h    WORD    number of EAV structures following
  1585.  02h    var    array of Extended Attribute Value structures (see #1011)
  1586. SeeAlso: #1007
  1587.  
  1588. Format of Extended Attribute Value structures:
  1589. Offset    Size    Description    (Table 1011)
  1590.  00h  4 BYTEs    ???
  1591.  04h    BYTE    size of reference string
  1592.  05h    WORD    size of value
  1593.  07h    var    reference string
  1594.     var    value
  1595. --------O-215702-----------------------------
  1596. INT 21 - OS/2 v1.1+ Family API - DosQFileInfo
  1597.     AX = 5702h
  1598.     BX = file handle
  1599.     CX = size of buffer for information
  1600.     DX = level of information
  1601.         0001h standard file information (see #1012)
  1602.         0002h Query EA Size (see #1012)
  1603.         0003h Query EAs from List (see #1013)
  1604.         0004h Query All EAs (see #1013)
  1605.     ES:DI -> buffer for information (see #1012,#1013)
  1606. Return: CF clear if successful
  1607.     CF set on error
  1608.         AX = error code
  1609. SeeAlso: AX=5702h/BX=FFFFh,AX=5703h"OS/2",AH=6Dh"OS/2"
  1610.  
  1611. Format of OS/2 DosQFileInfo:
  1612. Offset    Size    Description    (Table 1012)
  1613.  00h    WORD    creation date
  1614.  02h    WORD    creation time
  1615.  04h    WORD    last access date
  1616.  06h    WORD    last access time
  1617.  08h    WORD    last write date
  1618.  0Ah    WORD    last write time
  1619.  0Ch    DWORD    file size in bytes
  1620.  10h    DWORD    allocated space in bytes
  1621.  14h    WORD    file attributes
  1622. ---level 2 only---
  1623.  16h    DWORD    size of Extended Attributes in byte
  1624. SeeAlso: #1013,#1016
  1625.  
  1626. Format of OS/2 DosQFileInfo, EAOP structure:
  1627. Offset    Size    Description    (Table 1013)
  1628.  00h    DWORD    pointer to general EA list (see #1014)
  1629.  04h    DWORD    pointer to buffer for full EA list, with length field set
  1630.  08h    DWORD    (ret) error
  1631. Note:    for info level 3, the first pointer must contain the address of a
  1632.       list of the Extended Attributes to be retrieved; for info level 4,
  1633.       it should be 0000h:0000h
  1634. SeeAlso: #1012,#1016
  1635.  
  1636. Format of OS/2 DosQFileInfo, General EA List:
  1637. Offset    Size    Description    (Table 1014)
  1638.  00h    DWORD    (call) total size of list in bytes (including this field)
  1639.         (ret) number of bytes actually used (including this field)
  1640.  04h    var    Extended Attribute entries (see #1015) [packed arrray]
  1641.  
  1642. Format of OS/2 DosQFileInfo, General EA entry:
  1643. Offset    Size    Description    (Table 1015)
  1644.  00h    BYTE    length of Extended Attribute name (excluding terminating NUL)
  1645.  01h  N BYTEs    EA name
  1646.     BYTE    00h
  1647. SeeAlso: #1014
  1648.  
  1649. Format of OS/2 DosQFileInfo, Full EA List:
  1650. Offset    Size    Description    (Table 1016)
  1651.  00h    DWORD    (call) total size of list in bytes (including this field)
  1652.         (ret) number of bytes actually used (including this field)
  1653.  04h    var    Extended Attribute data (see #1017) [packed array]
  1654. SeeAlso: #1012,#1013
  1655.  
  1656. Format of OS/2 Extended Attribute data (struct FEA):
  1657. Offset    Size    Description    (Table 1017)
  1658.  00h    BYTE    flags
  1659.         bit 7: critical EA
  1660.  01h    BYTE    length of Extended Attribute name (excluding terminating NUL)
  1661.  02h    WORD    length of Extended Attribute value
  1662.  04h  N BYTEs    EA name
  1663.     BYTE    00h
  1664.       M BYTEs    EA value
  1665. --------O-215702BXFFFF-----------------------
  1666. INT 21 - OS/2 v1.1+ Compatibility Box Family API - DosQPathInfo
  1667.     AX = 5702h
  1668.     BX = FFFFh
  1669.     CX = size of buffer for information
  1670.     DX = level of information (0002h)
  1671.     DS:SI -> filename
  1672.     ES:DI -> buffer for FAPI path information (see #1018)
  1673. Return: CF clear if successful
  1674.         AL = 00h
  1675.     CF set on error
  1676.         AX = error code
  1677. SeeAlso: AX=5702h"OS/2",AX=5703h/BX=FFFFh
  1678.  
  1679. Format of FAPI path information:
  1680. Offset    Size    Description    (Table 1018)
  1681.  00h 22 BYTEs    ???
  1682.  16h    DWORD    extended attribute size (none present if less than 5)
  1683. --------D-215703-----------------------------
  1684. INT 21 - DOS 4.x only - GET EXTENDED ATTRIBUTE PROPERTIES
  1685.     AX = 5703h
  1686.     BX = file handle
  1687.     CX = size of result buffer or 0000h
  1688.     ES:DI -> result buffer
  1689. Return: CF clear if successful
  1690.         CX = size of returned data
  1691.     CF set on error
  1692.         AX = error code (see #1020)
  1693.     ES:DI -> zero word (DOS 4.0) if CX >= 2 on entry
  1694. Desc:    get a list of the extended attributes which are defined for the
  1695.       specified file
  1696. Notes:    if CX=0000h on entry, ES:DI is ignored and no data is actually
  1697.       returned, only the amount of data which is available
  1698.     the default DOS 4 behavior is to return a trivial EAP list consisting
  1699.       of the single word 0000h (no EAP structures) if CX>=0002h on entry;
  1700.       this functionality was apparently never released to the public
  1701. SeeAlso: AX=5702h,AX=5704h,AH=6Eh,INT 2F/AX=112Dh
  1702. --------O-215703-----------------------------
  1703. INT 21 - OS/2 v1.1+ Family API - DosSetFileInfo
  1704.     AX = 5703h
  1705.     BX = file handle
  1706.     CX = size of information buffer
  1707.     DX = level of information
  1708.     ES:DI -> information buffer
  1709. Return: CF clear if successful
  1710.     CF set on error
  1711.         AX = error code
  1712. SeeAlso: AX=5702h"OS/2",AX=5703h/BX=FFFFh
  1713. --------O-215703BXFFFF-----------------------
  1714. INT 21 - OS/2 v1.1+ Family API - DosSetPathInfo
  1715.     AX = 5703h
  1716.     BX = FFFFh
  1717.     CX = size of information buffer
  1718.     DX = level of information
  1719.     DS:SI -> filename
  1720.     ES:DI -> information buffer
  1721. Return: CF clear if successful
  1722.     CF set on error
  1723.         AX = error code
  1724. SeeAlso: AX=5702h/BX=FFFFh,AX=5703h"OS/2"
  1725. --------D-215704-----------------------------
  1726. INT 21 - DOS 4.x only - SET EXTENDED ATTRIBUTES
  1727.     AX = 5704h
  1728.     BX = file handle
  1729.     ES:DI -> EAV list (see #1010)
  1730. Return: CF clear if successful
  1731.     CF set on error
  1732.         AX = error code (see #1020)
  1733. Note:    the default DOS 4 behavior is to do nothing and return successfully;
  1734.       this functionality was apparently never released to the public
  1735. SeeAlso: AX=5702h,AX=5703h,INT 2F/AX=112Dh
  1736. --------D-215704-----------------------------
  1737. INT 21 - MS-DOS 7/Windows95 - GET LAST ACCESS DATE AND TIME
  1738.     AX = 5704h
  1739.     BX = file handle
  1740. Return: CF clear if successful
  1741.         DX = last access date (see #1006)
  1742.         CX = last access time (currently always 0000h)
  1743.     CF set on error
  1744.         AX = error code
  1745. SeeAlso: AX=5701h,AX=5705h,AX=5706h
  1746. --------D-215705-----------------------------
  1747. INT 21 - MS-DOS 7/Windows95 - SET LAST ACCESS DATE AND TIME
  1748.     AX = 5705h
  1749.     BX = file handle
  1750.     CX = new last-access time (currently not supported, must be 0000h)
  1751.     DX = new last-access date (see #1006)
  1752. Return: CF clear if successful
  1753.     CF set on error
  1754.         AX = error code
  1755. SeeAlso: AX=5700h,AX=5704h"Windows95",AX=5707h
  1756. --------D-215706-----------------------------
  1757. INT 21 - MS-DOS 7/Windows95 - GET CREATION DATE AND TIME
  1758.     AX = 5706h
  1759.     BX = file handle
  1760. Return: CF clear if successful
  1761.         CX = creation time (see #1005)
  1762.         DX = creation date (see #1006)
  1763.         SI = number of 10-millisecond units past time in CX (0-199)
  1764.     CF set on error
  1765.         AX = error code
  1766. SeeAlso: AX=5701h,AX=5704h"Windows95",AX=5707h
  1767. --------D-215707-----------------------------
  1768. INT 21 - MS-DOS 7/Windows95 - SET CREATION DATE AND TIME
  1769.     AX = 5707h
  1770.     BX = file handle
  1771.     CX = new creation time (see #1005)
  1772.     DX = new creation date (see #1006)
  1773.     SI = new creation time: 10-millisecond units past time in CX (0-199)
  1774. Return: CF clear if successful
  1775.     CF set on error
  1776.         AX = error code
  1777. SeeAlso: AX=5700h,AX=5705h,AX=5706h
  1778. --------v-215741-----------------------------
  1779. INT 21 - VIRUS - "WARP" -INSTALLATION CHECK
  1780.     AX = 5741h
  1781. Return: AX = 5250h if resident
  1782. SeeAlso: AX=5643h"VIRUS",AX=58CCh"VIRUS"
  1783. --------U-215757BX5757-----------------------
  1784. INT 21 U - IBM Genie - Resident Manager - INSTALLATION CHECK
  1785.     AX = 5757h
  1786.     BX = 5757h
  1787. Return: AX = 0000h if installed
  1788.         BX = ???
  1789.         DX = ???
  1790.         DS:SI -> list of 27 DWORD entry point addresses
  1791. Program: IBM Genie is a set of utility TSRs by Helix Software
  1792. Note:    other functions possible if BX <> 5757h, but details not yet available
  1793. ----------215758-----------------------------
  1794. INT 21 U - Headroom - API
  1795.     AX = 5758h
  1796.     BL = function
  1797.         00h ???
  1798.         01h get Headroom location
  1799.         Return: CF clear if installed
  1800.                 AX = PSP segment of Headroom TSR
  1801.                 BX = paragraphs of memory used by Headroom
  1802.             CF set if not (normal DOS return)
  1803.         Note:    this function is also used as an installation check
  1804.         02h get INT 21 handler
  1805.         Return: CF clear
  1806.             ES:BX -> Headroom's INT 21 handler
  1807.         Note: also sets unknown flag
  1808.         03h launch application???
  1809.         DS:SI -> 233-byte application record
  1810.         Return: ???
  1811.         04h ???
  1812.         ???
  1813.         Return: CF clear
  1814.         05h get swap directory
  1815.         Return: CF clear
  1816.             DX:AX -> ASCIZ swap directory name
  1817.         06h ???
  1818.         DX = ???
  1819.         Return: CF clear
  1820.         07h ???
  1821.         08h ???
  1822.         09h get current application
  1823.         Return: BX = application number
  1824.         0Ah ???
  1825.         DX = application number
  1826.         DS:SI = ???
  1827.         Return: ???
  1828.         0Bh ???
  1829.         0Ch ???
  1830.         DX = application number
  1831.         ???
  1832.         Return: ???
  1833.         0Dh ???
  1834.         DX = application number
  1835.         ???
  1836.         Return: ???
  1837.         0Eh get ???
  1838.         Return: CF clear
  1839.             AX = ???
  1840.         0Fh set ??? flag
  1841.         10h clear ??? flag
  1842.         11h find application by name
  1843.         DS:SI -> ASCIZ application name
  1844.         Return: CF clear
  1845.             AX = application number or FFFFh if not loaded
  1846.         12h ???
  1847.         DX = application number
  1848.         Return: CF clear
  1849.             ???
  1850.         13h ???
  1851.         Return: CF clear
  1852.         14h ???
  1853.         same as function 13h
  1854.         15h set ???
  1855.         DX = ???
  1856.         16h get ???
  1857.         Return: AX = ??? set by function 15h
  1858.         17h get ???
  1859.         Return: BX = ???
  1860.             CX = ??? (may be pointer in BX:CX)
  1861.         18h BUG: branches incorrectly due to fencepost error
  1862. Program: Headroom is a TSR/task switcher by Helix Software
  1863. SeeAlso: AX=4C57h,AX=5757h,INT 2F/AX=5758h
  1864. --------D-2158-------------------------------
  1865. INT 21 - DOS 2.11+ - GET OR SET MEMORY ALLOCATION STRATEGY
  1866.     AH = 58h
  1867.     AL = subfunction
  1868.         00h get allocation strategy
  1869.         Return: AX = current strategy (see #1019)
  1870.         01h set allocation strategy
  1871.         BL = new allocation strategy (see #1019)
  1872.         BH = 00h (DOS 5+)
  1873. Return: CF clear if successful
  1874.     CF set on error
  1875.         AX = error code (01h) (see #1020)
  1876. Notes:    the Set subfunction accepts any value in BL for DOS 3.x and 4.x;
  1877.       2 or greater means last fit
  1878.     the Get subfunction returns the last value set
  1879.     setting an allocation strategy involving high memory does not
  1880.       automatically link in the UMB memory chain; this must be done
  1881.       explicitly with AX=5803h in order to actually allocate high memory
  1882.     a program which changes the allocation strategy should restore it
  1883.       before terminating
  1884.     Toshiba MS-DOS v2.11 supports subfunctions 00h and 01h, as does the
  1885.       TI Professional MS-DOS v2.13
  1886.     DR DOS 3.41 reportedly reverses subfunctions 00h and 01h
  1887. SeeAlso: AH=48h,AH=49h,AH=4Ah,INT 2F/AX=4310h"XMS",INT 67/AH=3Fh
  1888.  
  1889. (Table 1019)
  1890. Values for DOS memory allocation strategy:
  1891.  00h low memory first fit
  1892.  01h low memory best fit
  1893.  02h low memory last fit
  1894. ---DOS 5+ ---
  1895.  40h high memory first fit
  1896.  41h high memory best fit
  1897.  42h high memory last fit
  1898.  80h first fit, try high then low memory
  1899.  81h best fit, try high then low memory
  1900.  82h last fit, try high then low memory
  1901. --------D-2158-------------------------------
  1902. INT 21 - DOS 5+ - GET OR SET UMB LINK STATE
  1903.     AH = 58h
  1904.     AL = subfunction
  1905.         02h get UMB link state
  1906.         Return: AL = current link state
  1907.                 00h UMBs not part of DOS memory chain
  1908.                 01h UMBs in DOS memory chain
  1909.         03h set UMB link state
  1910.         BX = new link state
  1911.             0000h remove UMBs from DOS memory chain
  1912.             0001h add UMBs to DOS memory chain
  1913. Return: CF clear if successful
  1914.     CF set on error
  1915.         AX = error code (01h) (see #1020)
  1916. Notes:    a program which changes the UMB link state should restore it before
  1917.       terminating
  1918.     UMBs will only be available if CONFIG.SYS contains the line DOS=UMB,
  1919.       the UMBs have been linked into the memory chain with AX=5803h, and
  1920.       the allocation strategy has been set to include high memory with
  1921.       AX=5801h
  1922. SeeAlso: #1027,#2046 at INT 2F/AX=4310h
  1923. --------v-2158CC-----------------------------
  1924. INT 21 - VIRUS - "1067"/"Headcrash" - INSTALLATION CHECK
  1925.     AX = 58CCh
  1926. Return: CF clear if resident
  1927. SeeAlso: AX=5741h"VIRUS",AX=5643h,AX=5252h,AX=58DDh,AX=6303h"VIRUS",AX=6969h
  1928. --------v-2158DD-----------------------------
  1929. INT 21 - VIRUS - "1067"/"Headcrash" - GET ORIGINAL INT 21h VECTOR
  1930.     AX = 58DDh
  1931. Return: CX = code segment of virus
  1932.     ES:BX = old INT 21h vector
  1933. SeeAlso: AX=5252h,AX=58CCh,AX=6969h
  1934. --------D-2159--BX0000-----------------------
  1935. INT 21 - DOS 3.0+ - GET EXTENDED ERROR INFORMATION
  1936.     AH = 59h
  1937.     BX = 0000h
  1938. Return: AX = extended error code (see #1020)
  1939.     BH = error class (see #1022)
  1940.     BL = recommended action (see #1023)
  1941.     CH = error locus (see #1024)
  1942.     ES:DI may be pointer (see #1021, #1020)
  1943.     CL, DX, SI, BP, and DS destroyed
  1944. Notes:    functions available under DOS 2.x map the true DOS 3.0+ error code into
  1945.       one supported under DOS 2.x
  1946.     you should call this function to retrieve the true error code when an
  1947.       FCB or DOS 2.x call returns an error
  1948.     under DR DOS 5.0, this function does not use any of the DOS-internal
  1949.       stacks and may thus be called at any time
  1950. SeeAlso: AH=59h/BX=0001h,AX=5D0Ah,INT 2F/AX=122Dh
  1951.  
  1952. (Table 1020)
  1953. Values for DOS extended error code:
  1954.  00h (0)   no error
  1955.  01h (1)   function number invalid
  1956.  02h (2)   file not found
  1957.  03h (3)   path not found
  1958.  04h (4)   too many open files (no handles available)
  1959.  05h (5)   access denied
  1960.  06h (6)   invalid handle
  1961.  07h (7)   memory control block destroyed
  1962.  08h (8)   insufficient memory
  1963.  09h (9)   memory block address invalid
  1964.  0Ah (10)  environment invalid (usually >32K in length)
  1965.  0Bh (11)  format invalid
  1966.  0Ch (12)  access code invalid
  1967.  0Dh (13)  data invalid
  1968.  0Eh (14)  reserved
  1969.  0Fh (15)  invalid drive
  1970.  10h (16)  attempted to remove current directory
  1971.  11h (17)  not same device
  1972.  12h (18)  no more files
  1973. ---DOS 3.0+ ---
  1974.  13h (19)  disk write-protected
  1975.  14h (20)  unknown unit
  1976.  15h (21)  drive not ready
  1977.  16h (22)  unknown command
  1978.  17h (23)  data error (CRC)
  1979.  18h (24)  bad request structure length
  1980.  19h (25)  seek error
  1981.  1Ah (26)  unknown media type (non-DOS disk)
  1982.  1Bh (27)  sector not found
  1983.  1Ch (28)  printer out of paper
  1984.  1Dh (29)  write fault
  1985.  1Eh (30)  read fault
  1986.  1Fh (31)  general failure
  1987.  20h (32)  sharing violation
  1988.  21h (33)  lock violation
  1989.  22h (34)  disk change invalid (ES:DI -> media ID structure)(see #1021)
  1990.  23h (35)  FCB unavailable
  1991.  24h (36)  sharing buffer overflow
  1992.  25h (37)  (DOS 4.0+) code page mismatch
  1993.  26h (38)  (DOS 4.0+) cannot complete file operation (out of input)
  1994.  27h (39)  (DOS 4.0+) insufficient disk space
  1995.  28h-31h   reserved
  1996.  32h (50)  network request not supported
  1997.  33h (51)  remote computer not listening
  1998.  34h (52)  duplicate name on network
  1999.  35h (53)  network name not found
  2000.  36h (54)  network busy
  2001.  37h (55)  network device no longer exists
  2002.  38h (56)  network BIOS command limit exceeded
  2003.  39h (57)  network adapter hardware error
  2004.  3Ah (58)  incorrect response from network
  2005.  3Bh (59)  unexpected network error
  2006.  3Ch (60)  incompatible remote adapter
  2007.  3Dh (61)  print queue full
  2008.  3Eh (62)  queue not full
  2009.  3Fh (63)  not enough space to print file
  2010.  40h (64)  network name was deleted
  2011.  41h (65)  network: Access denied
  2012.  42h (66)  network device type incorrect
  2013.  43h (67)  network name not found
  2014.  44h (68)  network name limit exceeded
  2015.  45h (69)  network BIOS session limit exceeded
  2016.  46h (70)  temporarily paused
  2017.  47h (71)  network request not accepted
  2018.  48h (72)  network print/disk redirection paused
  2019.  49h (73)  network software not installed
  2020.         (LANtastic) invalid network version
  2021.  4Ah (74)  unexpected adapter close
  2022.         (LANtastic) account expired
  2023.  4Bh (75)  (LANtastic) password expired
  2024.  4Ch (76)  (LANtastic) login attempt invalid at this time
  2025.  4Dh (77)  (LANtastic v3+) disk limit exceeded on network node
  2026.  4Eh (78)  (LANtastic v3+) not logged in to network node
  2027.  4Fh (79)  reserved
  2028.  50h (80)  file exists
  2029.  51h (81)  reserved
  2030.  52h (82)  cannot make directory
  2031.  53h (83)  fail on INT 24h
  2032.  54h (84)  (DOS 3.3+) too many redirections
  2033.  55h (85)  (DOS 3.3+) duplicate redirection
  2034.  56h (86)  (DOS 3.3+) invalid password
  2035.  57h (87)  (DOS 3.3+) invalid parameter
  2036.  58h (88)  (DOS 3.3+) network write fault
  2037.  59h (89)  (DOS 4.0+) function not supported on network
  2038.  5Ah (90)  (DOS 4.0+) required system component not installed
  2039.  5Bh (91)  (NetWare4) timer server table overflowed
  2040.  5Ch (92)  (NetWare4) duplicate in timer service table
  2041.  5Dh (93)  (NetWare4) no items to work on
  2042.  5Fh (95)  (NetWare4) invalid interrupt
  2043.  64h (100) (MSCDEX) unknown error
  2044.  64h (100) (NetWare4) open semaphore limit exceeded
  2045.  65h (101) (MSCDEX) not ready
  2046.  65h (101) (NetWare4) exclusive semaphore is already owned
  2047.  66h (102) (MSCDEX) EMS memory no longer valid
  2048.  66h (102) (NetWare4) semaphore was set when close attempted
  2049.  67h (103) (MSCDEX) not High Sierra or ISO-9660 format
  2050.  67h (103) (NetWare4) too many exclusive semaphore requests
  2051.  68h (104) (MSCDEX) door open
  2052.  68h (104) (NetWare4) operation invalid from interrupt handler
  2053.  69h (105) (NetWare4) semaphore owner died
  2054.  6Ah (106) (NetWare4) semaphore limit exceeded
  2055.  6Bh (107) (NetWare4) insert drive B: disk into drive A:
  2056.  6Ch (108) (NetWare4) drive locked by another process
  2057.  6Dh (109) (NetWare4) broken pipe
  2058.  6Eh (110) (NetWare4) pipe open/create failed
  2059.  6Fh (111) (NetWare4) pipe buffer overflowed
  2060.  70h (112) (NetWare4) disk full
  2061.  71h (113) (NetWare4) no more search handles
  2062.  72h (114) (NetWare4) invalid target handle for dup2
  2063.  73h (115) (NetWare4) bad user virtual address
  2064.  74h (116) (NetWare4) error on console I/O
  2065.  75h (117) (NetWare4) unknown category code for IOCTL
  2066.  76h (118) (NetWare4) invalid value for verify flag
  2067.  77h (119) (NetWare4) level four driver not found
  2068.  78h (120) (NetWare4) invalid function number
  2069.  79h (121) (NetWare4) semaphore timeout
  2070.  7Ah (122) (NetWare4) buffer too small
  2071.  7Bh (123) (NetWare4) invalid character or bad file-system name
  2072.  7Ch (124) (NetWare4) unimplemented information level
  2073.  7Dh (125) (NetWare4) no volume label found
  2074.  7Eh (126) (NetWare4) module handle not found
  2075.  7Fh (127) (NetWare4) procedure address not found
  2076.  80h (128) (NetWare4) CWait found no children
  2077.  81h (129) (NetWare4) CWait children still running
  2078.  82h (130) (NetWare4) invalid operation for direct disk-access handle
  2079.  83h (131) (NetWare4) attempted seek to negative offset
  2080.  84h (132) (NetWare4) attempted to seek on device or pipe
  2081.  85h (133) (NetWare4) drive already has JOINed drives
  2082.  86h (134) (NetWare4) drive is already JOINed
  2083.  87h (135) (NetWare4) drive is already SUBSTed
  2084.  88h (136) (NetWare4) can not delete drive which is not JOINed
  2085.  89h (137) (NetWare4) can not delete drive which is not SUBSTed
  2086.  8Ah (138) (NetWare4) can not JOIN to a JOINed drive
  2087.  8Bh (139) (NetWare4) can not SUBST to a SUBSTed drive
  2088.  8Ch (140) (NetWare4) can not JOIN to a SUBSTed drive
  2089.  8Dh (141) (NetWare4) can not SUBST to a JOINed drive
  2090.  8Eh (142) (NetWare4) drive is busy
  2091.  8Fh (143) (NetWare4) can not JOIN/SUBST to same drive
  2092.  90h (144) (NetWare4) directory must not be root directory
  2093.  91h (145) (NetWare4) can only JOIN to empty directory
  2094.  92h (146) (NetWare4) path is already in use for SUBST
  2095.  93h (147) (NetWare4) path is already in use for JOIN
  2096.  94h (148) (NetWare4) path is in use by another process
  2097.  95h (149) (NetWare4) directory previously SUBSTituted
  2098.  96h (150) (NetWare4) system trace error
  2099.  97h (151) (NetWare4) invalid event count for DosMuxSemWait
  2100.  98h (152) (NetWare4) too many waiting on mutex
  2101.  99h (153) (NetWare4) invalid list format
  2102.  9Ah (154) (NetWare4) volume label too large
  2103.  9Bh (155) (NetWare4) unable to create another TCB
  2104.  9Ch (156) (NetWare4) signal refused
  2105.  9Dh (157) (NetWare4) segment discarded
  2106.  9Eh (158) (NetWare4) segment not locked
  2107.  9Fh (159) (NetWare4) invalid thread-ID address
  2108.  A0h (160) (NetWare4) bad environment pointer
  2109.  A1h (161) (NetWare4) invalid name passed to EXEC
  2110.  A2h (162) (NetWare4) signal already pending
  2111.  A3h (163) (NetWare4) ERROR_124 mapping
  2112.  A4h (164) (NetWare4) no more process slots
  2113.  A5h (165) (NetWare4) ERROR_124 mapping
  2114.  B0h (176) (MS-DOS 7.0) volume is not locked
  2115.  B1h (177) (MS-DOS 7.0) volume is locked in drive
  2116.  B2h (178) (MS-DOS 7.0) volume is not removable
  2117.  B4h (180) (MS-DOS 7.0) lock count has been exceeded
  2118.  B4h (180) (NetWare4) invalid segment number
  2119.  B5h (181) (MS-DOS 7.0) a valid eject request failed
  2120.  B5h (181) (NetWare4) invalid call gate
  2121.  B6h (182) (NetWare4) invalid ordinal
  2122.  B7h (183) (NetWare4) shared segment already exists
  2123.  B8h (184) (NetWare4) no child process to wait for
  2124.  B9h (185) (NetWare4) NoWait specified and child still running
  2125.  BAh (186) (NetWare4) invalid flag number
  2126.  BBh (187) (NetWare4) semaphore does not exist
  2127.  BCh (188) (NetWare4) invalid starting code segment
  2128.  BDh (189) (NetWare4) invalid stack segment
  2129.  BEh (190) (NetWare4) invalid module type (DLL can not be used as application)
  2130.  BFh (191) (NetWare4) invalid EXE signature
  2131.  C0h (192) (NetWare4) EXE marked invalid
  2132.  C1h (193) (NetWare4) bad EXE format (e.g. DOS-mode program)
  2133.  C2h (194) (NetWare4) iterated data exceeds 64K
  2134.  C3h (195) (NetWare4) invalid minimum allocation size
  2135.  C4h (196) (NetWare4) dynamic link from invalid Ring
  2136.  C5h (197) (NetWare4) IOPL not enabled
  2137.  C6h (198) (NetWare4) invalid segment descriptor privilege level
  2138.  C7h (199) (NetWare4) automatic data segment exceeds 64K
  2139.  C8h (200) (NetWare4) Ring2 segment must be moveable
  2140.  C9h (201) (NetWare4) relocation chain exceeds segment limit
  2141.  CAh (202) (NetWare4) infinite loop in relocation chain
  2142.  CBh (203) (NetWare4) environment variable not found
  2143.  CCh (204) (NetWare4) not current country
  2144.  CDh (205) (NetWare4) no signal sent
  2145.  CEh (206) (NetWare4) file name not 8.3
  2146.  CFh (207) (NetWare4) Ring2 stack in use
  2147.  D0h (208) (NetWare4) meta expansion is too long
  2148.  D1h (209) (NetWare4) invalid signal number
  2149.  D2h (210) (NetWare4) inactive thread
  2150.  D3h (211) (NetWare4) file system information not available
  2151.  D4h (212) (NetWare4) locked error
  2152.  D5h (213) (NetWare4) attempted to execute non-family API call in DOS mode
  2153.  D6h (214) (NetWare4) too many modules
  2154.  D7h (215) (NetWare4) nesting not allowed
  2155.  E6h (230) (NetWare4) non-existent pipe, or bad operation
  2156.  E7h (231) (NetWare4) pipe is busy
  2157.  E8h (232) (NetWare4) no data available for nonblocking read
  2158.  E9h (233) (NetWare4) pipe disconnected by server
  2159.  EAh (234) (NetWare4) more data available
  2160.  FFh (255) (NetWare4) invalid drive
  2161. SeeAlso: #1022,#1023,#1024,#1295
  2162.  
  2163. Format of media ID structure:
  2164. Offset    Size    Description    (Table 1021)
  2165.  00h 12 BYTEs    ASCIZ volume label of required disk
  2166.  0Ch    DWORD    serial number (DOS 4.0+)
  2167.  
  2168. (Table 1022)
  2169. Values for DOS Error Class:
  2170.  01h    out of resource (storage space or I/O channels)
  2171.  02h    temporary situation (file or record lock)
  2172.  03h    authorization (denied access)
  2173.  04h    internal (system software bug)
  2174.  05h    hardware failure
  2175.  06h    system failure (configuration file missing or incorrect)
  2176.  07h    application program error
  2177.  08h    not found
  2178.  09h    bad format
  2179.  0Ah    locked
  2180.  0Bh    media error
  2181.  0Ch    already exists
  2182.  0Dh    unknown
  2183. SeeAlso: #1020,#1023,#1024
  2184.  
  2185. (Table 1023)
  2186. Values for DOS Suggested Action:
  2187.  01h    retry
  2188.  02h    delayed retry
  2189.  03h    prompt user to reenter input
  2190.  04h    abort after cleanup
  2191.  05h    immediate abort
  2192.  06h    ignore
  2193.  07h    retry after user intervention
  2194. SeeAlso: #1020,#1022,#1024
  2195.  
  2196. (Table 1024)
  2197. Values for DOS Error Locus:
  2198.  01h    unknown or not appropriate
  2199.  02h    block device (disk error)
  2200.  03h    network related
  2201.  04h    serial device (timeout)
  2202.  05h    memory related
  2203. SeeAlso: #1020,#1022,#1023
  2204. --------D-2159--BX0001-----------------------
  2205. INT 21 - European MS-DOS 4.0 - GET HARD ERROR INFORMATION
  2206.     AH = 59h
  2207.     BX = 0001h
  2208. Return: ES:DI -> hard error information packet (see #1025) for most recent
  2209.         hard (critical) error
  2210. SeeAlso: AH=59h/BX=0000h,AH=95h,INT 24
  2211.  
  2212. Format of European MS-DOS 4.0 hard error information packet:
  2213. Offset    Size    Description    (Table 1025)
  2214.  00h    WORD    contents of AX at system entry
  2215.  02h    WORD    Process ID which encountered error
  2216.  04h    WORD    contents of AX at time of error
  2217.  06h    BYTE    error type
  2218.         00h physical I/O error
  2219.         01h disk change request
  2220.         02h file sharing violation
  2221.         03h FCB problem
  2222.         04h file locking violation
  2223.         05h bad FAT
  2224.         06h network detected error
  2225.  07h    BYTE    INT 24 error code
  2226.  08h    WORD    extended error code (see #1020)
  2227.  0Ah    DWORD    pointer to associated device
  2228. --------D-215A-------------------------------
  2229. INT 21 - DOS 3.0+ - CREATE TEMPORARY FILE
  2230.     AH = 5Ah
  2231.     CX = file attribute (see #0765 at AX=4301h)
  2232.     DS:DX -> ASCIZ path ending with a '\' + 13 zero bytes to receive the
  2233.         generated filename
  2234. Return: CF clear if successful
  2235.         AX = file handle opened for read/write in compatibility mode
  2236.         DS:DX pathname extended with generated name for temporary file
  2237.     CF set on error
  2238.         AX = error code (03h,04h,05h) (see #1020)
  2239. Desc:    creates a file with a unique name which must be explicitly deleted
  2240. BUGS:    COMPAQ DOS 3.31 hangs if the pathname is at XXXXh:0000h; it apparently
  2241.       wraps around to the end of the segment
  2242.     MS-DOS 5.00 revisions A and B and PC-DOS 5.00 revision A reportedly
  2243.       hang the system if the specified path is the root directory and the
  2244.       root directory is full (no free directory entries)
  2245.     Mark Incley <mincley@krisalis.demon.co.uk> reports that this function
  2246.       hangs in DOS 6.2x if the name includes two consecutive path
  2247.       separators (e.g. C:\\ )
  2248. Notes:    under the FlashTek X-32 DOS extender, the path pointer is in DS:EDX
  2249.     MS-DOS 3.0-4.0 and DR-DOS 3.4-5.0 generate the filename as a sequence
  2250.       of hex digits based on the current date and time; MS-DOS 6+,
  2251.       DR-DOS 6, and Novell DOS 7 use letters A-P in place of hex digits
  2252. SeeAlso: AH=3Ch,AH=5Bh
  2253. --------D-215B-------------------------------
  2254. INT 21 - DOS 3.0+ - CREATE NEW FILE
  2255.     AH = 5Bh
  2256.     CX = file attribute (see #0765 at AX=4301h)
  2257.     DS:DX -> ASCIZ filename
  2258. Return: CF clear if successful
  2259.         AX = file handle opened for read/write in compatibility mode
  2260.     CF set on error
  2261.         AX = error code (03h,04h,05h,50h) (see #1020)
  2262. Notes:    unlike AH=3Ch, this function will fail if the specified file exists
  2263.       rather than truncating it; this permits its use in creating semaphore
  2264.       files because it is an atomic "test and set" operation
  2265.     under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
  2266. SeeAlso: AH=3Ch,AH=5Ah
  2267. --------D-215C-------------------------------
  2268. INT 21 - DOS 3.0+ - "FLOCK" - RECORD LOCKING
  2269.     AH = 5Ch
  2270.     AL = subfunction
  2271.         00h lock region of file
  2272.         01h unlock region of file
  2273.     BX = file handle
  2274.     CX:DX = start offset of region within file
  2275.     SI:DI = length of region in bytes
  2276. Return: CF clear if successful
  2277.     CF set on error
  2278.         AX = error code (01h,06h,21h,24h) (see #1020)
  2279. Notes:    error returned unless SHARE or network installed
  2280.     an unlock call must specify the same region as some prior lock call
  2281.     locked regions become entirely inaccessible to other processes
  2282.     duplicate handles created with AH=45h or AH=46h inherit locks, but
  2283.       handles inherited by child processes (see AH=4Bh) do not
  2284.     under DR DOS 3.41 and 5.0, if a process opens a file without the no-
  2285.       inherit flag and then starts a child, any locks set by the parent
  2286.       are ignored, and the child will only get an error if it tries to
  2287.       lock an area previously locked by the parent process
  2288. SeeAlso: AX=440Bh,AH=BCh,AH=BEh,INT 2F/AX=110Ah,INT 2F/AX=110Bh
  2289. --------D-215D00-----------------------------
  2290. INT 21 U - DOS 3.1+ internal - SERVER FUNCTION CALL
  2291.     AX = 5D00h
  2292.     DS:DX -> DOS parameter list (see #1026)
  2293.     DPL contains all register values for a call to INT 21h
  2294. Return: as appropriate for function being called
  2295. Notes:    does not check AH.  Out of range values will crash the system
  2296.     executes using specified computer ID and process ID
  2297.     sharing delay loops skipped
  2298.     a special sharing mode is enabled to handle FCBs opened across network
  2299.     wildcards are enabled for DELETE (AH=41h) and RENAME (AH=56h) under
  2300.       MS-DOS; under DR DOS 3.41, wildcards corrupt the filesystem; and
  2301.       under DR DOS 5.0-6.0, the call returns error code 03h due to improper
  2302.       support for the server function call (refer to BUGS: section below)
  2303.     an extra file attribute parameter is enabled for OPEN (AH=3Dh),
  2304.       DELETE (AH=41h), and RENAME (AH=56h)
  2305.     functions which take filenames require canonical names (as returned
  2306.       by AH=60h); this is apparently to prevent multi-hop file forwarding
  2307. BUGS:    the OS/2 2.0 DOS Boot Session incorrectly maps DOS drive letters,
  2308.       seemingly ignoring HPFS drives
  2309.     DR DOS 5.0-6.0 merely recursively call INT 21 after loading the
  2310.       registers from the DPL, leading to problems for peer-to-peer
  2311.       networks
  2312. SeeAlso: AH=3Dh,AH=41h,AH=56h,AH=60h
  2313.  
  2314. Format of DOS parameter list:
  2315. Offset    Size    Description    (Table 1026)
  2316.  00h    WORD    AX
  2317.  02h    WORD    BX
  2318.  04h    WORD    CX
  2319.  06h    WORD    DX
  2320.  08h    WORD    SI
  2321.  0Ah    WORD    DI
  2322.  0Ch    WORD    DS
  2323.  0Eh    WORD    ES
  2324.  10h    WORD    reserved (0)
  2325.  12h    WORD    computer ID (0 = current system)
  2326.  14h    WORD    process ID (PSP segment on specified computer)
  2327. Note:    under Windows Enhanced mode, the computer ID is normally the virtual
  2328.       machine ID (see INT 2F/AX=1683h), though this can reportedly be
  2329.       changed by setting UniqueDOSPSP= in SYSTEM.INI
  2330. --------D-215D01-----------------------------
  2331. INT 21 U - DOS 3.1+ internal - COMMIT ALL FILES FOR SPECIFIED COMPUTER/PROCESS
  2332.     AX = 5D01h
  2333.     DS:DX -> DOS parameter list (see #1026), only computer ID and
  2334.           process ID fields used
  2335. Return: CF set on error
  2336.         AX = error code (see #1020)
  2337.     CF clear if successful
  2338. Notes:    flushes buffers and updates directory entries for each file which has
  2339.       been written to; if remote file, calls INT 2F/AX=1107h
  2340.     the computer ID and process ID are stored but ignored under DOS 3.3
  2341.     not supported by DR DOS 3.41 and 5.0; returns error code 01h
  2342. SeeAlso: AH=0Dh,AH=68h,INT 2F/AX=1107h
  2343. --------D-215D02-----------------------------
  2344. INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE FILE BY NAME
  2345.     AX = 5D02h
  2346.     DS:DX -> DOS parameter list (see #1026), only fields DX, DS,
  2347.           computer ID, and process ID used
  2348.     DPL's DS:DX -> ASCIZ name of file to close
  2349. Return: CF set on error
  2350.         AX = error code (see #1020)
  2351.     CF clear if successful
  2352. Notes:    error unless SHARE is loaded (calls [SysFileTable-28h])
  2353.       (see #0977 at AH=52h)
  2354.     name must be canonical fully-qualified, such as returned by AH=60h
  2355.     not supported by DR DOS 3.41 and 5.0; returns error code 01h
  2356.     not supported by Novell DOS 7
  2357. SeeAlso: AX=5D03h,AX=5D04h,AH=3Eh,AH=60h
  2358. --------D-215D03-----------------------------
  2359. INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN COMPUTER
  2360.     AX = 5D03h
  2361.     DS:DX -> DOS parameter list (see #1026), only computer ID used
  2362. Return: CF set on error
  2363.         AX = error code (see #1020)
  2364.     CF clear if successful
  2365. Notes:    error unless SHARE is loaded (calls [SysFileTable-30h])
  2366.       (see #0977 at AH=52h)
  2367.     not supported by DR DOS 3.41 and 5.0; returns error code 01h
  2368.     not supported by Novell DOS 7
  2369. SeeAlso: AX=5D02h,AX=5D04h
  2370. --------D-215D04-----------------------------
  2371. INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN PROCESS
  2372.     AX = 5D04h
  2373.     DS:DX -> DOS parameter list (see #1026), only computer ID and
  2374.           process ID fields used
  2375. Return: CF set on error
  2376.         AX = error code (see #1020)
  2377.     CF clear if successful
  2378. Notes:    error unless SHARE is loaded (calls [SysFileTable-2Ch])
  2379.        (see #0977 at AH=52h)
  2380.     not supported by DR DOS 3.41 and 5.0; returns error code 01h
  2381.     not supported by Novell DOS 7
  2382. SeeAlso: AX=5D02h,AX=5D03h,INT 2F/AX=111Dh
  2383. --------D-215D05-----------------------------
  2384. INT 21 U - DOS 3.1+ internal - SHARE.EXE - GET OPEN FILE LIST ENTRY
  2385.     AX = 5D05h
  2386.     DS:DX -> DOS parameter list (see #1026)
  2387.     DPL's BX = index of sharing record (see #0978 at AH=52h)
  2388.     DPL's CX = index of SFT in sharing record's SFT list
  2389. Return: CF clear if successful
  2390.         ES:DI -> ASCIZ filename
  2391.         BX = network machine number of SFT's owner
  2392.         CX = number of locks held by SFT's owner
  2393.     CF set if either index out of range
  2394.         AX = 0012h (no more files)
  2395. Notes:    error unless SHARE is loaded (calls [SysFileTable-18h])
  2396.       (see #0977 at AH=52h)
  2397.     names are always canonical fully-qualified, such as returned by AH=60h
  2398.     not supported by DR DOS 3.41 and 5.0 and Novell DOS 7, but does not
  2399.       return an error, instead destroying AX
  2400. SeeAlso: AH=5Ch,AH=60h
  2401. --------D-215D06-----------------------------
  2402. INT 21 U - DOS 3.0+ internal - GET ADDRESS OF DOS SWAPPABLE DATA AREA
  2403.     AX = 5D06h
  2404. Return: CF set on error
  2405.        AX = error code (see #1020)
  2406.     CF clear if successful
  2407.         DS:SI -> nonreentrant data area (includes all three DOS stacks)
  2408.         (critical error flag is first byte) (see #1027)
  2409.         CX = size in bytes of area which must be swapped while in DOS
  2410.         DX = size in bytes of area which must always be swapped
  2411. Notes:    the Critical Error flag is used in conjunction with the InDOS flag
  2412.       (see AH=34h) to determine when it is safe to enter DOS from a TSR
  2413.     setting CritErr flag allows use of functions 50h/51h from INT 28h under
  2414.       DOS 2.x by forcing use of correct stack
  2415.     swapping the data area allows reentering DOS unless DOS is in a
  2416.       critical section delimited by INT 2A/AH=80h and INT 2A/AH=81h,82h
  2417.     under DOS 4.0, AX=5D0Bh should be used instead of this function
  2418.     SHARE and other DOS utilities consult the byte at offset 04h in the
  2419.       DOS data segment (see INT 2F/AX=1203h) to determine the SDA format
  2420.       in use: 00h = DOS 3.x, 01h = DOS 4.0-6.0, other = error.
  2421.     DR DOS 3.41+ supports this function, but the SDA format beyond the
  2422.       first 18h bytes is completely different from MS-DOS
  2423. SeeAlso: AX=5D0Bh,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h
  2424.  
  2425. Format of DOS 3.10-3.30 Swappable Data Area:
  2426. Offset    Size    Description    (Table 1027)
  2427.  -34    BYTE    (DOS 3.10+) printer echo flag (00h off, FFh active)
  2428.  -31    BYTE    (DOS 3.30) current switch character
  2429.  -30    BYTE    current memory allocation strategy (see AH=58h)
  2430.  -28    BYTE    (DOS 3.30) incremented on each INT 21/AX=5E01h call
  2431.  -27 16 BYTEs    (DOS 3.30) machine name set by INT 21/AX=5E01h
  2432.  -11  5 WORDs    zero-terminated list of offsets which need to be patched to
  2433.           enable critical-section calls (see INT 2A/AH=80h)
  2434.  -1    BYTE    unused padding
  2435. ---start of actual SDA---
  2436.  00h    BYTE    critical error flag ("ErrorMode")
  2437.  01h    BYTE    InDOS flag (count of active INT 21 calls)
  2438.  02h    BYTE    drive on which current critical error occurred, or FFh
  2439.         (DR DOS sets to drive number during INT 24, 00h otherwise)
  2440.  03h    BYTE    locus of last error
  2441.  04h    WORD    extended error code of last error
  2442.  06h    BYTE    suggested action for last error
  2443.  07h    BYTE    class of last error
  2444.  08h    DWORD    ES:DI pointer for last error
  2445.  0Ch    DWORD    current DTA (Disk Transfer Address)
  2446.         note: may point into SDA during the DOS EXEC function
  2447.           (see AH=4Bh), so programs which swap the SDA must be
  2448.           prepared to move the DTA to a private buffer if they
  2449.           might be invoked during an EXEC
  2450.  10h    WORD    current PSP
  2451.  12h    WORD    stores SP across an INT 23
  2452.  14h    WORD    return code from last process termination (zerod after reading
  2453.           with AH=4Dh)
  2454.  16h    BYTE    current drive
  2455.  17h    BYTE    extended break flag
  2456. ---remainder need only be swapped if in DOS---
  2457.  18h    WORD    value of AX on call to INT 21
  2458.  1Ah    WORD    PSP segment for sharing/network
  2459.  1Ch    WORD    network machine number for sharing/network (0000h = us)
  2460.  1Eh    WORD    first usable memory block found when allocating memory
  2461.  20h    WORD    best usable memory block found when allocating memory
  2462.  22h    WORD    last usable memory block found when allocating memory
  2463.  24h    WORD    memory size in paragraphs (used only during initialization)
  2464.  26h    WORD    last entry checked during directory search
  2465.  28h    BYTE    flag: INT 24 returned Fail
  2466.  29h    BYTE    flags: allowable INT 24 actions (passed to INT 24 in AH)
  2467.  2Ah    BYTE    directory flag (00h directory, 01h file)
  2468.  2Bh    BYTE    flag: FFh if Ctrl-Break termination, 00h otherwise
  2469.  2Ch    BYTE    flag: allow embedded blanks in FCB
  2470.  2Dh    BYTE    padding (unused)
  2471.  2Eh    BYTE    day of month
  2472.  2Fh    BYTE    month
  2473.  30h    WORD    year - 1980
  2474.  32h    WORD    number of days since 1-1-1980
  2475.  34h    BYTE    day of week (0 = Sunday)
  2476.  35h    BYTE    flag: console swapped during read from device
  2477.  36h    BYTE    flag: safe to call INT 28 if nonzero
  2478.  37h    BYTE    flag: if nonzero, INT 24 Abort turned into INT 24 Fail
  2479.         (set only during process termination)
  2480.  38h 26 BYTEs    device driver request header (see #1931 at INT 2F/AX=0802h)
  2481.  52h    DWORD    pointer to device driver entry point (used in calling driver)
  2482.  56h 22 BYTEs    device driver request header for I/O calls
  2483.  6Ch 14 BYTEs    device driver request header for disk status check
  2484.  7Ah    DWORD    pointer to device I/O buffer???
  2485.  7Eh    WORD    ???
  2486.  80h    WORD    ???
  2487.  82h    BYTE    type of PSP copy (00h=simple for INT 21/AH=26h, FFh=make child)
  2488.  83h    BYTE    padding (unused)
  2489.  84h  3 BYTEs    24-bit user number (see AH=30h)
  2490.  87h    BYTE    OEM number (see #0741 at AH=30h)
  2491.  88h    WORD    offset to error code conversion table for INT 25/INT 26
  2492.  8Ah  6 BYTEs    CLOCK$ transfer record (see #1028)
  2493.  90h    BYTE    device I/O buffer for single-byte I/O functions
  2494.  91h    BYTE    padding??? (unused)
  2495.  92h 128 BYTEs    buffer for filename
  2496. 112h 128 BYTEs    buffer for filename
  2497. 192h 21 BYTEs    findfirst/findnext search data block (see #0967 at AH=4Eh)
  2498. 1A7h 32 BYTEs    directory entry for found file (see #0700 at AH=11h)
  2499. 1C7h 81 BYTEs    copy of current directory structure for drive being accessed
  2500. 218h 11 BYTEs    FCB-format filename for device name comparison
  2501. 223h    BYTE    terminating NUL for above filename
  2502. 224h 11 BYTEs    wildcard destination specification for rename (FCB format)
  2503. 22Fh    BYTE    terminating NUL for above spec
  2504. 230h    BYTE    ???
  2505. 231h    WORD    destination file/directory starting sector
  2506. 233h  5 BYTEs    ???
  2507. 238h    BYTE    extended FCB file attribute
  2508. 239h    BYTE    type of FCB (00h regular, FFh extended)
  2509. 23Ah    BYTE    directory search attributes
  2510. 23Bh    BYTE    file open/access mode
  2511. 23Ch    BYTE    file found/delete flag
  2512.         bit 0: file found
  2513.         bit 4: file deleted
  2514. 23Dh    BYTE    flag: device name found on rename, or file not found
  2515. 23Eh    BYTE    splice flag (file name and directory name together)
  2516. 23Fh    BYTE    flag indicating how DOS function was invoked
  2517.         (00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
  2518. 240h    BYTE    sector position within cluster
  2519. 241h    BYTE    flag: translate sector/cluster (00h no, 01h yes)
  2520. 242h    BYTE    flag: 00h if read, 01h if write
  2521. 243h    BYTE    current working drive number
  2522. 244h    BYTE    cluster factor
  2523. 245h    BYTE    flag: cluster split mode
  2524. 246h    BYTE    line edit (AH=0Ah) insert mode flag (nonzero = on)
  2525. 247h    BYTE    canonicalized filename referred to existing file/dir if FFh
  2526. 248h    BYTE    volume ID flag
  2527. 249h    BYTE    type of process termination (00h-03h) (see AH=4Dh)
  2528. 24Ah    BYTE    file create flag (00h = no, search only)
  2529. 24Bh    BYTE    value with which to replace first byte of deleted file's name
  2530.           (normally E5h, but 00h as described under INT 21/AH=13h)
  2531. 24Ch    DWORD    pointer to Drive Parameter Block for critical error invocation
  2532.         temp: used during process termination
  2533. 250h    DWORD    pointer to stack frame containing user registers on INT 21
  2534. 254h    WORD    stores SP across INT 24
  2535. 256h    DWORD    pointer to DOS Drive Parameter Block for ???
  2536. 25Ah    WORD    saving partial cluster number
  2537. 25Ch    WORD    temp: sector of work current cluster
  2538. 25Eh    WORD    high part of cluster number (only low byte referenced)
  2539. 260h    WORD    ??? temp
  2540. 262h    BYTE    Media ID byte returned by AH=1Bh,1Ch
  2541. 263h    BYTE    padding (unused)
  2542. 264h    DWORD    pointer to device header when filename is character device
  2543. 268h    DWORD    pointer to current SFT
  2544. 26Ch    DWORD    pointer to current directory structure for drive being accessed
  2545. 270h    DWORD    pointer to caller's FCB
  2546. 274h    WORD    number of SFT to which file being opened will refer
  2547. 276h    WORD    temporary storage for file handle
  2548. 278h    DWORD    pointer to a JFT entry in process handle table
  2549.           (see #0725 at AH=26h)
  2550. 27Ch    WORD    offset in DOS DS of first filename argument
  2551. 27Eh    WORD    offset in DOS DS of second filename argument
  2552. 280h    WORD    offset of last component in pathname or FFFFh
  2553. 282h    WORD    offset of transfer address to add
  2554. 284h    WORD    last relative cluster within file being accessed
  2555. 286h    WORD    temp: absolute cluster number being accessed
  2556. 288h    WORD    directory sector number
  2557. 28Ah    WORD    ??? current cluster number
  2558. 28Ch    WORD    current relative sector number within file
  2559. 28Eh    WORD    current sector number
  2560. 290h    WORD    current byte offset within sector
  2561. 292h    DWORD    current offset in file
  2562. 296h    DWORD    temp: file byte count
  2563. 29Ah    WORD    temp: file byte count
  2564. 29Ch    WORD    free file cluster entry
  2565. 29Eh    WORD    last file cluster entry
  2566. 2A0h    WORD    next file cluster number
  2567. 2A2h    DWORD    number of bytes appended to file
  2568. 2A6h    DWORD    pointer to current work disk buffer
  2569. 2AAh    DWORD    pointer to working SFT
  2570. 2AEh    WORD    used by INT 21 dispatcher to store caller's BX
  2571. 2B0h    WORD    used by INT 21 dispatcher to store caller's DS
  2572. 2B2h    WORD    temporary storage while saving/restoring caller's registers
  2573. 2B4h    DWORD    pointer to prev call frame (offset 250h) if INT 21 reentered
  2574.         also switched to for duration of INT 24
  2575. 2B8h 21 BYTEs    FindFirst search data for source file(s) of a rename operation
  2576.         (see #0967 at AH=4Eh)
  2577. 2CDh 32 BYTEs    directory entry for file being renamed (see #0700 at AH=11h)
  2578. 2EDh 331 BYTEs    critical error stack
  2579.    403h     35 BYTEs scratch SFT
  2580. 438h 384 BYTEs    disk stack (functions greater than 0Ch, INT 25,INT 26)
  2581. 5B8h 384 BYTEs    character I/O stack (functions 01h through 0Ch)
  2582. ---DOS 3.2,3.3x only---
  2583. 738h    BYTE    device driver lookahead flag (usually printer)
  2584.         (see AH=64h"DOS 3.2+")
  2585. 739h    BYTE    volume change flag
  2586. 73Ah    BYTE    flag: virtual open
  2587. 73Bh    BYTE    ???
  2588. SeeAlso: #1030
  2589.  
  2590. Format of CLOCK$ transfer record:
  2591. Offset    Size    Description    (Table 1028)
  2592.  00h    WORD    number of days since 1-Jan-1980
  2593.  02h    BYTE    minutes
  2594.  03h    BYTE    hours
  2595.  04h    BYTE    hundredths of second
  2596.  05h    BYTE    seconds
  2597. --------D-215D07-----------------------------
  2598. INT 21 U - DOS 3.1+ network - GET REDIRECTED PRINTER MODE
  2599.     AX = 5D07h
  2600. Return: DL = mode
  2601.         00h redirected output is combined
  2602.         01h redirected output in separate print jobs
  2603. SeeAlso: AX=5D08h,AX=5D09h,INT 2F/AX=1125h
  2604. --------D-215D08-----------------------------
  2605. INT 21 U - DOS 3.1+ network - SET REDIRECTED PRINTER MODE
  2606.     AX = 5D08h
  2607.     DL = mode
  2608.         00h redirected output is combined
  2609.         01h redirected output placed in separate jobs, start new print job
  2610.         now
  2611. SeeAlso: AX=5D07h,AX=5D09h,INT 2F/AX=1125h
  2612. --------D-215D09-----------------------------
  2613. INT 21 U - DOS 3.1+ network - FLUSH REDIRECTED PRINTER OUTPUT
  2614.     AX = 5D09h
  2615. Notes:    forces redirected printer output to be printed, and starts a new print
  2616.       job
  2617.     this function is also supported by 10Net, which calls it Terminate All
  2618.       Spool Jobs, and does not flush if in "combine" mode
  2619. SeeAlso: AX=5D07h,AX=5D08h,INT 2F/AX=1125h
  2620. --------D-215D0A-----------------------------
  2621. INT 21 - DOS 3.1+ - SET EXTENDED ERROR INFORMATION
  2622.     AX = 5D0Ah
  2623.     DS:DX -> 11-word DOS parameter list (see #1026)
  2624. Return: nothing.  next call to AH=59h will return values from fields AX,BX,CX,
  2625.       DX,DI, and ES in corresponding registers
  2626. Notes:    documented for DOS 5+, but undocumented in earlier versions
  2627.     the MS-DOS Programmer's Reference incorrectly states that this call was
  2628.       introduced in DOS 4, and fails to mention that the ERROR structure
  2629.       passed to this function is a DOS parameter list.
  2630. BUGS:    DR DOS 3.41 and 5.0 read the value for ES from the DS field of the
  2631.       DPL; fortunately, MS-DOS ignores the DS field, allowing a generic
  2632.       routine which sets both DS and ES fields to the same value
  2633.     Novell DOS 7 does not save the pointer, which is always reported as
  2634.       0000h:0000h by AH=59h
  2635. SeeAlso: AH=59h/BX=0000h
  2636. --------D-215D0B-----------------------------
  2637. INT 21 OU - DOS 4.x only internal - GET DOS SWAPPABLE DATA AREAS
  2638.     AX = 5D0Bh
  2639. Return: CF set on error
  2640.         AX = error code (see #1020)
  2641.     CF clear if successful
  2642.         DS:SI -> swappable data area list (see #1029)
  2643. Notes:    copying and restoring the swappable data areas allows DOS to be
  2644.       reentered unless it is in a critical section delimited by calls to
  2645.       INT 2A/AH=80h and INT 2A/AH=81h,82h
  2646.     SHARE and other DOS utilities consult the byte at offset 04h in the
  2647.       DOS data segment (see INT 2F/AX=1203h) to determine the SDA format
  2648.       in use: 00h = DOS 3.x, 01h = DOS 4.0-6.0, other = error.
  2649.     DOS 5+ use the SDA format listed below, but revert back to the DOS 3.x
  2650.       call for finding the SDA (see #1027)
  2651. SeeAlso: AX=5D06h,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h,INT 2F/AX=1203h
  2652.  
  2653. Format of DOS 4.x swappable data area list:
  2654. Offset    Size    Description    (Table 1029)
  2655.  00h    WORD    count of data areas
  2656.  02h  N BYTEs    "count" copies of data area record
  2657.         Offset    Size    Description
  2658.          00h    DWORD    address
  2659.          04h    WORD    length and type
  2660.                 bit 15 set if swap always, clear if swap in DOS
  2661.                 bits 14-0: length in bytes
  2662. SeeAlso: #1030
  2663.  
  2664. Format of DOS 4.0-6.0 swappable data area:
  2665. Offset    Size    Description    (Table 1030)
  2666.  -34    BYTE    printer echo flag (00h off, FFh active)
  2667.  -31    BYTE    current switch character (ignored by DOS 5+)
  2668.  -30    BYTE    current memory allocation strategy (see AH=58h)
  2669.  -28    BYTE    incremented on each INT 21/AX=5E01h call
  2670.  -27 16 BYTEs    machine name set by INT 21/AX=5E01h
  2671.  -11  5 WORDs    zero-terminated list of offsets which need to be patched to
  2672.           enable critical-section calls (see INT 2A/AH=80h)
  2673.         (all offsets are 0D0Ch, but this list is still present for
  2674.           DOS 3.x compatibility)
  2675.  -1    BYTE    unused padding
  2676. ---start of actual SDA---
  2677.  00h    BYTE    critical error flag ("ErrorMode")
  2678.  01h    BYTE    InDOS flag (count of active INT 21 calls)
  2679.  02h    BYTE    drive on which current critical error occurred or FFh
  2680.  03h    BYTE    locus of last error
  2681.  04h    WORD    extended error code of last error
  2682.  06h    BYTE    suggested action for last error
  2683.  07h    BYTE    class of last error
  2684.  08h    DWORD    ES:DI pointer for last error
  2685.  0Ch    DWORD    current DTA (Disk Transfer Address)
  2686.         note: may point into SDA during the DOS EXEC function
  2687.           (see AH=4Bh), so programs which swap the SDA must be
  2688.           prepared to move the DTA to a private buffer if they
  2689.           might be invoked during an EXEC
  2690.  10h    WORD    current PSP
  2691.  12h    WORD    stores SP across an INT 23
  2692.  14h    WORD    return code from last process termination (zerod after reading
  2693.           with AH=4Dh)
  2694.  16h    BYTE    current drive
  2695.  17h    BYTE    extended break flag
  2696.  18h    BYTE    flag: code page switching
  2697.  19h    BYTE    flag: copy of previous byte in case of INT 24 Abort
  2698. ---remainder need only be swapped if in DOS---
  2699.  1Ah    WORD    value of AX on call to INT 21
  2700.  1Ch    WORD    PSP segment for sharing/network
  2701.  1Eh    WORD    network machine number for sharing/network (0000h = us)
  2702.  20h    WORD    first usable memory block found when allocating memory
  2703.  22h    WORD    best usable memory block found when allocating memory
  2704.  24h    WORD    last usable memory block found when allocating memory
  2705.  26h    WORD    memory size in paragraphs (used only during initialization)
  2706.  28h    WORD    last entry checked during directory search
  2707.  2Ah    BYTE    flag: nonzero if INT 24 Fail
  2708.  2Bh    BYTE    flags: allowable INT 24 responses (passed to INT 24 in AH)
  2709.  2Ch    BYTE    flag: do not set directory if nonzero
  2710.  2Dh    BYTE    flag: program aborted by ^C
  2711.  2Eh    BYTE    flag: allow embedded blanks in FCB
  2712.         may also allow use of "*" wildcard in FCBs
  2713.  2Fh    BYTE    padding (unused)
  2714.  30h    BYTE    day of month
  2715.  31h    BYTE    month
  2716.  32h    WORD    year - 1980
  2717.  34h    WORD    number of days since 1-1-1980
  2718.  36h    BYTE    day of week (0 = Sunday)
  2719.  37h    BYTE    flag: console swapped during read from device
  2720.  38h    BYTE    flag: safe to call INT 28 if nonzero
  2721.  39h    BYTE    flag: abort currently in progress, turn INT 24 Abort into Fail
  2722.  3Ah 30 BYTEs    device driver request header (see #1931 at INT 2F/AX=0802h) for
  2723.           device calls
  2724.  58h    DWORD    pointer to device driver entry point (used in calling driver)
  2725.  5Ch 22 BYTEs    device driver request header for I/O calls
  2726.  72h 14 BYTEs    device driver request header for disk status check
  2727.  80h    DWORD    pointer to device I/O buffer
  2728.  84h    WORD    ???
  2729.  86h    WORD    ??? (0)
  2730.  88h    BYTE    type of PSP copy (00h=simple for INT 21/AH=26h, FFh=make child)
  2731.  89h    DWORD    start offset of file region to lock/unlock
  2732.  8Dh    DWORD    length of file region to lock/unlock
  2733.  91h    BYTE    padding (unused)
  2734.  92h  3 BYTEs    24-bit user number (see AH=30h)
  2735.  95h    BYTE    OEM number (see #0741 at AH=30h)
  2736.  96h  6 BYTEs    CLOCK$ transfer record (see #1028 at AX=5D06h)
  2737.  9Ch    BYTE    device I/O buffer for single-byte I/O functions
  2738.  9Dh    BYTE    padding???
  2739.  9Eh 128 BYTEs    buffer for filename
  2740. 11Eh 128 BYTEs    buffer for filename
  2741. 19Eh 21 BYTEs    findfirst/findnext search data block (see #0967 at AH=4Eh)
  2742. 1B3h 32 BYTEs    directory entry for found file (see #0741 at AH=11h)
  2743. 1D3h 88 BYTEs    copy of current directory structure for drive being accessed
  2744. 22Bh 11 BYTEs    FCB-format filename for device name comparison
  2745. 236h    BYTE    terminating NUL for above filename
  2746. 237h 11 BYTEs    wildcard destination specification for rename (FCB format)
  2747. 242h    BYTE    terminating NUL for above filespec
  2748. 243h    BYTE    ???
  2749. 244h    WORD    ???
  2750. 246h  5 BYTEs    ???
  2751. 24Bh    BYTE    extended FCB file attributes
  2752. 24Ch    BYTE    type of FCB (00h regular, FFh extended)
  2753. 24Dh    BYTE    directory search attributes
  2754. 24Eh    BYTE    file open/access mode
  2755. 24Fh    BYTE    ??? flag bits
  2756.         reportedly 00h when deleting a file under MSDOS 5.0
  2757. 250h    BYTE    flag: device name found on rename, or file not found
  2758. 251h    BYTE    splice flag??? (file name and directory name together)
  2759. 252h    BYTE    flag indicating how DOS function was invoked
  2760.         (00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
  2761. 253h    BYTE    sector position within cluster
  2762. 254h    BYTE    ??? (flag: translate sector/cluster)
  2763. 255h    BYTE    ??? (flag: 00h if read, 01h if write)
  2764. 256h    BYTE    current working drive number
  2765. 257h    BYTE    cluster factor
  2766. 258h    BYTE    ???
  2767. 259h    BYTE    line edit (AH=0Ah) insert mode flag (nonzero = on)
  2768. 25Ah    BYTE    canonicalized filename referred to existing file/dir if FFh
  2769. 25Bh    BYTE    volume ID flag
  2770. 25Ch    BYTE    type of process termination (00h-03h) (see AH=4Dh)
  2771. 25Dh    BYTE    ???
  2772. 25Eh    BYTE    ??? file create flag (00h = no, search only)
  2773. 25Fh    BYTE    ??? (value for deleted file's first byte)
  2774. 260h    DWORD    pointer to Drive Parameter Block for critical error invocation
  2775. 264h    DWORD    pointer to stack frame containing user registers on INT 21
  2776. 268h    WORD    stores SP across INT 24
  2777. 26Ah    DWORD    pointer to DOS Drive Parameter Block for ???
  2778. 26Eh    WORD    segment of disk buffer
  2779. 270h    WORD    ??? (saving partial cluster number)
  2780. 272h    WORD    ??? (temp: sector of work current cluster)
  2781. 274h    WORD    ??? (high part of cluster number)
  2782. 276h    WORD    ??? (temp)
  2783. 278h    BYTE    Media ID byte returned by AH=1Bh,1Ch
  2784. 279h    BYTE    ??? (doesn't seem to be referenced)
  2785. 27Ah    DWORD    pointer to device header if filename is character device
  2786. 27Eh    DWORD    pointer to current SFT
  2787. 282h    DWORD    pointer to current directory structure for drive being accessed
  2788. 286h    DWORD    pointer to caller's FCB
  2789. 28Ah    WORD    SFT index to which file being opened will refer
  2790. 28Ch    WORD    temporary storage for file handle
  2791. 28Eh    DWORD    pointer to a JFT entry in process handle table
  2792.           (see #0725 at AH=26h)
  2793. 292h    WORD    offset in DOS DS of first filename argument
  2794. 294h    WORD    offset in DOS DS of second filename argument
  2795. 296h    WORD    ??? (offset of last component in pathname or FFFFh)
  2796. 298h    WORD    offset of transfer address to add
  2797. 29Ah    WORD    last relative cluster within file being accessed
  2798. 29Ch    WORD    temp: absolute cluster number being accessed
  2799. 29Eh    WORD    directory sector number
  2800. 2A0h    WORD    ???
  2801. 2A2h    WORD    ??? directory cluster number
  2802. 2A4h    DWORD    current relative sector number within file
  2803. 2A8h    DWORD    ??? (current sector number)
  2804. 2ACh    WORD    ??? (current byte offset within sector)
  2805. 2AEh    DWORD    current offset in file
  2806. 2B2h    WORD    ???
  2807. 2B4h    WORD    bytes in partial sector
  2808. 2B6h    WORD    number of sectors
  2809. 2B8h    WORD    ??? (free file cluster entry)
  2810. 2BAh    WORD    ??? (last file cluster entry)
  2811. 2BCh    WORD    ??? (next file cluster number)
  2812. 2BEh    DWORD    number of bytes appended to file
  2813. 2C2h    DWORD    pointer to current work disk buffer
  2814. 2C6h    DWORD    pointer to working SFT
  2815. 2CAh    WORD    used by INT 21 dispatcher to store caller's BX
  2816. 2CCh    WORD    used by INT 21 dispatcher to store caller's DS
  2817. 2CEh    WORD    temporary storage while saving/restoring caller's registers
  2818. 2D0h    DWORD    pointer to prev call frame (offset 264h) if INT 21 reentered
  2819.         also switched to for duration of INT 24
  2820. 2D4h    WORD    open mode/action for INT 21/AX=6C00h
  2821. 2D6h    BYTE    ??? (set to 00h by INT 21h dispatcher, 02h when a read is
  2822.           performed, and 01h or 03h by INT 21/AX=6C00h)
  2823. 2D7h    WORD    ??? apparently unused
  2824. 2D9h    DWORD    stored ES:DI for AX=6C00h
  2825. 2DDh    WORD    extended file open action code (see #1112 at AX=6C00h)
  2826. 2DFh    WORD    extended file open attributes (see #1111 at AX=6C00h)
  2827. 2E1h    WORD    extended file open file mode (see AX=6C00h)
  2828. 2E3h    DWORD    pointer to filename to open (see AX=6C00h)
  2829. 2E7h    WORD    ??? temp DX storage or 0000h or temp data buffer size from
  2830.           disk buffer
  2831. 2E9h    WORD    ???
  2832. 2EBh    BYTE    ???
  2833. 2ECh    WORD    stores DS during call to [List-of-Lists + 37h]
  2834. 2EEh    WORD    ???
  2835. 2F0h    BYTE    ???
  2836. 2F1h    WORD    ??? bit flags
  2837. 2F3h    DWORD    pointer to user-supplied filename
  2838. 2F7h    DWORD    pointer to ???
  2839. 2FBh    WORD    stores SS during call to [List-of-Lists + 37h]
  2840. 2FDh    WORD    stores SP during call to [List-of-Lists + 37h]
  2841. 2FFh    BYTE    flag, nonzero if stack switched in calling [List-of-Lists+37h]
  2842. 300h 21 BYTEs    FindFirst search data for source file(s) of a rename operation
  2843.         (see #0967 at AH=4Eh)
  2844. 315h 32 BYTEs    directory entry for file being renamed (see #0700 at AH=11h)
  2845. 335h 331 BYTEs    critical error stack
  2846. 480h 384 BYTEs    disk stack (functions greater than 0Ch, INT 25,INT 26)
  2847. 600h 384 BYTEs    character I/O stack (functions 01h through 0Ch)
  2848. 780h    BYTE    device driver lookahead flag (usually printer)
  2849.         (see AH=64h"DOS 3.2+")
  2850. 781h    BYTE    volume change flag
  2851. 782h    BYTE    flag: virtual open
  2852. 783h    BYTE    ???
  2853. 784h    WORD    ???
  2854. 786h    WORD    ???
  2855. 788h    WORD    ???
  2856. 78Ah    WORD    ???
  2857. SeeAlso: #1027,#1029
  2858. --------D-215E00-----------------------------
  2859. INT 21 - DOS 3.1+ network - GET MACHINE NAME
  2860.     AX = 5E00h
  2861.     DS:DX -> 16-byte buffer for ASCII machine name
  2862. Return: CF clear if successful
  2863.         CH = validity
  2864.         00h name invalid
  2865.         nonzero valid
  2866.             CL = NetBIOS number for machine name
  2867.             DS:DX buffer filled with blank-paded name
  2868.     CF set on error
  2869.         AX = error code (01h) (see #1020 at AH=59h)
  2870. Note:    supported by OS/2 v1.3+ compatibility box, PC-NFS
  2871. SeeAlso: AX=5E01h
  2872. --------N-215E00-----------------------------
  2873. INT 21 - 10NET v5.0 - GET MACHINE NAME
  2874.     AX = 5E00h
  2875. Return: CL = redirector's NetBIOS name number
  2876.     ES:DI -> network node ID
  2877. SeeAlso: AX=5E01h"10NET"
  2878. --------D-215E01CH00-------------------------
  2879. INT 21 - DOS 3.1+ network - SET MACHINE NAME
  2880.     AX = 5E01h
  2881.     CH = 00h undefine name (make it invalid)
  2882.        <> 0     define name
  2883.     CL = name number
  2884.     DS:DX -> 15-character blank-padded ASCIZ name
  2885. SeeAlso: AX=5E00h
  2886. --------N-215E01-----------------------------
  2887. INT 21 - 10NET v5.0 - GET LOCAL 10NET CONFIGURATION TABLE
  2888.     AX = 5E01h
  2889.     CX = length of buffer
  2890.     DS:DX -> buffer for 10Net configuration table (see #1031)
  2891. Return: DS:DX buffer filled
  2892. SeeAlso: AX=5E00h"10NET",INT 6F/AH=02h,INT 6F/AH=03h
  2893.  
  2894. Format of 10Net Configuration Table:
  2895. Offset    Size    Description    (Table 1031)
  2896.  00h  8 BYTEs    user name
  2897.  08h 15 BYTEs    node ID
  2898.  17h  3 BYTEs    unique portion of Ethernet address
  2899.  1Ah    BYTE    Who group number
  2900.  1Bh    WORD    services mask (see #1033)
  2901.  1Dh    DWORD    serial number
  2902.  21h    BYTE    maximum concurrent users with same serial number allowed on net
  2903.  22h    BYTE    chat mask (see #1034)
  2904.  23h    BYTE    internal system bits (see #1035)
  2905.  24h  9 BYTEs    version number in format MM.mm.xxx
  2906.  2Dh    BYTE    flag: 01h if machine is a PS/2
  2907.  2Eh    BYTE    flag: 03h if 80386
  2908.  2Fh    BYTE    spool termination mode: 01h concatenate, 02h truncate
  2909.         (see AX=5D09h)
  2910.  30h    WORD    autospool timeout in clock ticks
  2911.  32h    WORD    monitor timeout in clock ticks
  2912.  34h    WORD    unused
  2913.  36h    WORD    chat timeout in clock ticks
  2914.  38h    WORD    netBIOS session timeout in half-seconds
  2915.  3Ah    WORD    datagram send timeout in seconds
  2916.  3Ch    WORD    keyboard value for initiating chat mode
  2917.  3Eh    WORD    Who timeout in clock ticks
  2918.  40h    BYTE    flag: 01h if server should process rom NetBIOS Post return
  2919.  41h    BYTE    flag: 01h if FCBs should be recycled
  2920.  42h  3 BYTEs    signature "DBG"
  2921.  45h    BYTE    last interrupt (21h or 6Fh)
  2922.  46h    BYTE    last INT 21 AH value
  2923.  47h    BYTE    last INT 6F AH value
  2924.  48h    WORD    last item posted
  2925.  4Ah    WORD    last item free-posted
  2926.  4Ch    WORD    last item handled by server
  2927.  4Eh    WORD    last redirector send NCB
  2928.  50h    WORD    last redirector receive NCB
  2929.  52h  4 BYTEs    signature "TABL"
  2930.  56h    WORD    offset of datagram buffer table header (see #1032)
  2931.  58h    WORD    offset of chat buffer table header (see #1032)
  2932.  5Ah    WORD    offset of Raw buffer table header (see #1032)
  2933.  5Ch    WORD    offset of Workstation buffer table header (see #1032)
  2934.  5Eh    WORD    offset of server receive-any table header (see #1032)
  2935.  60h    WORD    offset of Tiny buffer table header (see #1032)
  2936.  62h    WORD    offset of zero-length buffer table (NCBs) (see #1032)
  2937.  64h    WORD    offset of Rdr (Redirector Mount) table header (see #1032)
  2938.  66h    WORD    offset of Ntab (Redirector Session) table header (see #1032)
  2939.  68h    WORD    offset of FCB table header (see #1032)
  2940.  6Ah    WORD    offset of user file handle table header (see #1032)
  2941.  6Ch    WORD    offset of workstation printer RDR extension table header
  2942.  6Eh    WORD    offset of server shared device table header (see #1032)
  2943.  70h    WORD    offset of server connection table header (see #1032)
  2944.  72h    WORD    offset of server login table header (see #1032)
  2945.  74h    WORD    offset of server file table header (see #1032)
  2946.  76h    WORD    offset of server shared file table header (see #1032)
  2947.  78h    WORD    offset of server record lock table header (see #1032)
  2948.  7Ah    WORD    offset of remote printer claim table header (see #1032)
  2949.  7Ch    WORD    offset of remote printer device table header (see #1032)
  2950.  7Eh    WORD    offset of print server mount table header (see #1032)
  2951.  80h    WORD    offset of print server sessions table header (see #1032)
  2952.  82h    WORD    offset of print server print job structure table header
  2953.  84h    WORD    offset of print server pooled device table header (see #1032)
  2954.  86h    WORD    size of workstation buffer
  2955.  88h    WORD    size of server receive-any buffer
  2956.  8Ah    WORD    size of server raw I/O buffer
  2957.  8Ch  6 BYTEs    reserved
  2958.  92h    DWORD    pointer to profile pathname
  2959.  96h    BYTE    datagram retry count
  2960.  97h    BYTE    NetBIOS LAN adapter number
  2961.  98h  6 BYTEs    physical Ethernet address
  2962.  9Eh    BYTE    NetBIOS server name number
  2963.  9Fh    BYTE    NetBIOS redirector name number
  2964.  A0h    BYTE    10Net interrupt number
  2965.  A1h    BYTE    flag: chat is loaded
  2966.  A2h    BYTE    flag: INT 6F APIs permanently loaded
  2967.  A3h    BYTE    flag: file security present
  2968.  A4h    WORD    reserved
  2969.  A6h    BYTE    fixed mount bitmask for drives A:-H:
  2970.  A7h    BYTE    reserved
  2971.  A8h    WORD    10Net system flags (see #1036)
  2972.  AAh    BYTE    monitor flags (see #1037)
  2973.  ABh  5 BYTEs    reserved
  2974.  B0h    WORD    offset of monitor timer block
  2975.  B2h    WORD    offset of server timer block
  2976.  B4h    WORD    offset of chat timer block
  2977.  B6h    WORD    timer chain
  2978.  B8h  4 BYTEs    signature "TALS"
  2979.  BCh    WORD    number of 10Net sends
  2980.  BEh    WORD    number of 10Net receives
  2981.  C0h    WORD    number of no-buffer conditions
  2982.  C2h    WORD    number of dropped posted messages
  2983.  C4h    WORD    number of server NCB errors
  2984.  C6h    WORD    number of redirector NCB errors
  2985.  C8h    WORD    number of datagram send/receive errors
  2986.  CAh    WORD    number of dropped Whos
  2987.  CCh    WORD    number of dropped submits
  2988.  CEh    WORD    number of session aborts
  2989.  D0h    BYTE    number of NetBIOS interface-busy errors
  2990.  D1h    BYTE    last NetBIOS bad post command
  2991.  D2h    BYTE    last NetBIOS bad redirector command
  2992.  D3h    BYTE    do send datagram send/receive error command
  2993.  D4h    DWORD    -> DOS system parameter table
  2994.  D8h    WORD    number of DOS physical drives
  2995.  DAh    WORD    offset of DOS PSP field in DOS data segment
  2996.  DCh    WORD    offset of in-DOS flag in DOS data segment
  2997.  DEh    WORD    DOS data segment
  2998.  E0h    WORD    offset of DOS SFT in DOS data segment
  2999.  E2h    WORD    offset of number-of-physical-units field in DOS data segment
  3000.  E4h    WORD    10Net code segment
  3001.  E6h    WORD    10Net data segment
  3002.  E8h    WORD    10Net common server segment
  3003.  EAh    WORD    10Net file server segment
  3004.  ECh    WORD    10Net print server segment
  3005.  EEh    WORD    10Net remote printer segment
  3006. Note:    documentation lists field at offset D0h as a WORD, but all following
  3007.       offsets are as though it were a BYTE; if it is indeed a WORD, all
  3008.       offsets after D0h must be increased by one byte
  3009.  
  3010. Format of 10Net Table Header:
  3011. Offset    Size    Description    (Table 1032)
  3012.  -16  4 BYTEs    table identifier
  3013.  -12    WORD    peak number of tables allocated
  3014.  -10    WORD    number of tables currently in use
  3015.  -8    WORD    total number of tables
  3016.  -6    WORD    size of each table
  3017.  -4    WORD    offset of first allocated table
  3018.  -2    WORD    offset of first free table
  3019.  
  3020. Bitfields for 10NET services mask:
  3021. Bit(s)    Description    (Table 1033)
  3022.  0    workstation
  3023.  1    file server
  3024.  2    print queue server
  3025.  3    de-spool server
  3026.  
  3027. Bitfields for 10NET chat mask:
  3028. Bit(s)    Description    (Table 1034)
  3029.  0    chat permitted
  3030.  1    bell enabled
  3031.  2    chat keyboard initiated
  3032.  3    in INT 16 handler
  3033.  4    in Get Input
  3034.  5    display has timed out
  3035.  6    chat is idle
  3036.  
  3037. Bitfields for 10NET internal system bits:
  3038. Bit(s)    Description    (Table 1035)
  3039.  0    submit permitted
  3040.  1    submit initiated
  3041.  2    submit executing
  3042.  3    internal client call/chat/spool/autospool
  3043.  4    in spool termination
  3044.  5    print permitted
  3045.  6    waiting for keyboard input
  3046.  
  3047. Bitfields for 10NET System Flags:
  3048. Bit(s)    Description    (Table 1036)
  3049.  0    in NetBIOS
  3050.  1    processing INT 28
  3051.  2    is server
  3052.  3    in net user-DOS function
  3053.  4    in DOS user-DOS function
  3054.  5    in net for user non-DOS function
  3055.  6    in server DOS function
  3056.  7    in server non-DOS function
  3057.  8    in terminate
  3058.  10    in user on server request
  3059.  13    in DOS for user on server
  3060.  14    disable critical error handler
  3061.  
  3062. Bitfields for Monitor Flags:
  3063. Bit(s)    Description    (Table 1037)
  3064.  0    waiting for monitor response
  3065.  4    in monitor get-input routine
  3066.  5    monitor display timeout
  3067.  6    sensing for escape key
  3068. --------D-215E02-----------------------------
  3069. INT 21 - DOS 3.1+ network - SET NETWORK PRINTER SETUP STRING
  3070.     AX = 5E02h
  3071.     BX = redirection list index (see AX=5F02h)
  3072.     CX = length of setup string
  3073.     DS:SI -> setup string
  3074. Return: CF clear if successful
  3075.     CF set on error
  3076.         AX = error code (01h) (see #1020 at AH=59h/BX=0000h)
  3077. Note:    also supported by 10NET v5.0
  3078. SeeAlso: AX=5E03h,INT 2F/AX=111Fh
  3079. --------D-215E03-----------------------------
  3080. INT 21 - DOS 3.1+ network - GET NETWORK PRINTER SETUP STRING
  3081.     AX = 5E03h
  3082.     BX = redirection list index (see AX=5F02h)
  3083.     ES:DI -> 64-byte buffer for setup string
  3084. Return: CF clear if successful
  3085.         CX = length of setup string
  3086.         ES:DI buffer filled
  3087.     CF set on error
  3088.         AX = error code (01h) (see #1020 at AH=59h/BX=0000h)
  3089. Note:    also supported by 10NET v5.0, but 10NET is documented as using DS:SI
  3090.       instead of ES:DI
  3091. SeeAlso: AX=5E02h,INT 2F/AX=111Fh
  3092. --------D-215E04-----------------------------
  3093. INT 21 - DOS 3.1+ network - SET PRINTER MODE
  3094.     AX = 5E04h
  3095.     BX = redirection list index (see AX=5F02h)
  3096.     DX = mode
  3097.         bit 0: set if binary, clear if text (tabs expanded to blanks)
  3098. Return: CF set on error
  3099.         AX = error code (see #1020 at AH=59h/BX=0000h)
  3100.     CF clear if successful
  3101. Note:    calls INT 2F/AX=111Fh with 5E04h on stack
  3102. SeeAlso: AX=5E05h"DOS",INT 2F/AX=111Fh
  3103. --------N-215E04-----------------------------
  3104. INT 21 - 10NET v5.0 - INITIATE PRINT JOB
  3105.     AX = 5E04h
  3106.     BX = zero-based redirection list index (see AX=5F02h)
  3107.     DS:DX -> extended workstation printer setup structure (see #1038)
  3108. Return: CF clear if successful
  3109.     CF set on error
  3110.         AX = error code (see #1020 at AH=59h/BX=0000h)
  3111. SeeAlso: AX=5E05h"10NET",AX=5E06h"10NET"
  3112.  
  3113. Format of 10NET extended workstation printer setup structure:
  3114. Offset    Size    Description    (Table 1038)
  3115.  00h    BYTE    notification flags (see #1039)
  3116.  01h    BYTE    job control mask (see #1040)
  3117.  02h    WORD    days to retain file
  3118.  04h    WORD    test print length
  3119.  06h    BYTE    number of copies to print
  3120.  07h    BYTE    compression algorithm
  3121.  08h    BYTE    tab width (00h = don't expand)
  3122.  09h    BYTE    initiation type (00h normal, 01h non-spooled)
  3123.  0Ah 38 BYTEs    job start operation notification instructions
  3124.  30h 32 BYTEs    comment for job
  3125.  50h 64 BYTEs    output filename or non-spooled file
  3126.  
  3127. Bitfields for 10NET notification flags:
  3128. Bit(s)    Description    (Table 1039)
  3129.  0    user at print start
  3130.  1    operator at start, with reply
  3131.  2    user at print completion
  3132.  3    operator at completion, with reply
  3133.  4    user on queue switch
  3134.  5    operator on queue switch, with reply
  3135.  6    user on print error
  3136.  
  3137. Bitfields for 10NET job control mask:
  3138. Bit(s)    Description    (Table 1040)
  3139.  0    print banner page
  3140.  1    eject page at end of job
  3141.  2    mark as "held" (queue but don't print)
  3142.  3    rush job (queue at top)
  3143.  4    overwrite file with zeros before deletion
  3144.  5    hyperspool if possible
  3145. --------D-215E05-----------------------------
  3146. INT 21 - DOS 3.1+ network - GET PRINTER MODE
  3147.     AX = 5E05h
  3148.     BX = redirection list index (see AX=5F02h)
  3149. Return: CF set on error
  3150.         AX = error code (see #1020 at AH=59h/BX=0000h)
  3151.     CF clear if successful
  3152.         DX = printer mode (see AX=5E04h)
  3153. Note:    calls INT 2F/AX=111Fh with 5E05h on stack
  3154. SeeAlso: AX=5E04h"DOS",INT 2F/AX=111Fh
  3155. --------N-215E05-----------------------------
  3156. INT 21 - 10NET v5.0 - TERMINATE PRINT JOB
  3157.     AX = 5E05h
  3158.     BX = zero-based redirection list index (see AX=5F02h)
  3159. Return: CF clear if successful
  3160.     CF set on error
  3161.         AX = error code (see #1020 at AH=59h/BX=0000h)
  3162. Note:    this call resets the spool termination mode to "truncate"
  3163.       (see AX=5D08h)
  3164. SeeAlso: AX=5E04h"10NET",AX=5E06h
  3165. --------N-215E06-----------------------------
  3166. INT 21 - 10NET v5.0 - GET/SET 10NET WORKSTATION PRINTER SETUP STRUCTURE
  3167.     AX = 5E06h
  3168.     BX = zero-based redirection list index (see AX=5F02h)
  3169.     CX = operation (06h set, 07h get)
  3170.     DS:DX -> buffer for setup structure (same as first nine bytes of
  3171.           workstation printer setup) (see #1038)
  3172. Return: CF clear if successful
  3173.         DS:DX buffer updated on get
  3174.     CF set on error
  3175.         AX = error code (see #1020 at AH=59h/BX=0000h)
  3176. SeeAlso: AX=5E04h"10NET",AX=5E05h"10NET"
  3177. --------D-215F00-----------------------------
  3178. INT 21 - DOS 3.1+ network - GET REDIRECTION MODE
  3179.     AX = 5F00h
  3180.     BL = redirection type
  3181.         03h printer
  3182.         04h disk drive
  3183. Return: CF set on error
  3184.         AX = error code (see #1020 at AH=59h/BX=0000h)
  3185.     CF clear if successful
  3186.         BH = redirection state
  3187.         00h off
  3188.         01h on
  3189. Note:    calls INT 2F/AX=111Eh with AX on top of the stack
  3190. SeeAlso: AX=5F01h,INT 2F/AX=111Eh
  3191. --------D-215F01-----------------------------
  3192. INT 21 - DOS 3.1+ network - SET REDIRECTION MODE
  3193.     AX = 5F01h
  3194.     BL = redirection type
  3195.         03h printer
  3196.         04h disk drive
  3197.     BH = redirection state
  3198.         00h off
  3199.         01h on
  3200. Return: CF set on error
  3201.         AX = error code (see #1020 at AH=59h/BX=0000h)
  3202.     CF clear if successful
  3203. Notes:    when redirection is off, the local device (if any) rather than the
  3204.       remote device is used
  3205.     calls INT 2F/AX=111Eh with AX on top of the stack
  3206. SeeAlso: AX=5F00h,INT 2F/AX=111Eh,INT 60/AX=0002h
  3207. --------D-215F02-----------------------------
  3208. INT 21 - DOS 3.1+ network - GET REDIRECTION LIST ENTRY
  3209.     AX = 5F02h
  3210.     BX = zero-based redirection list index
  3211.     CX = driver signature
  3212.         0000h LANtastic
  3213.         4E57h ('NW') NetWare
  3214.     DS:SI -> 16-byte buffer for ASCIZ local device name or drive letter
  3215.           followed by colon
  3216.     ES:DI -> 128-byte buffer for ASCIZ network name
  3217. Return: CF clear if successful
  3218.         BH = device status
  3219.         00h valid
  3220.         01h invalid
  3221.         02h valid (connected from inside Windows for Workgroups v3.11)
  3222.         BL = device type
  3223.         03h printer
  3224.         04h disk drive
  3225.         CX = user data previously set with AX=5F03h
  3226.         DS:SI and ES:DI buffers filled
  3227.         DX,BP destroyed
  3228.     CF set on error
  3229.         AX = error code (01h,12h) (see #1020 at AH=59h/BX=0000h)
  3230. Notes:    this function is passed through to INT 2F/AX=111Eh by the DOS kernel
  3231.     error code 12h is returned if BX is greater than the size of the list
  3232.     also supported by Banyan VINES, PC-NFS, LANtastic, and 10NET
  3233.     supported by LapLink RemoteAccess but returns the local drive letter;
  3234.       the remote drive letter can be obtained with INT 2F/AX=Cxxxh
  3235.       (see INT 2F/AX=C000h"LapLink")
  3236.     the returned device name may or may not include a colon, depending on
  3237.       the network software
  3238. SeeAlso: AX=5F03h,AX=5F46h,INT 2F/AX=111Eh,INT 2F/AX=C000h"LapLink"
  3239. --------D-215F03-----------------------------
  3240. INT 21 - DOS 3.1+ network - REDIRECT DEVICE
  3241.     AX = 5F03h
  3242.     BL = device type
  3243.         03h printer
  3244.         04h disk drive
  3245.     CX = user data to save
  3246.         0000h for LANtastic
  3247.         4E57h ("NW") for NetWare 4.0 requester
  3248.     DS:SI -> ASCIZ local device name (16 bytes max)
  3249.     ES:DI -> ASCIZ network name + ASCIZ password (128 bytes max total)
  3250. Return: CF clear if successful
  3251.     CF set on error
  3252.         AX = error code (01h,03h,05h,08h,0Fh,12h) (see #1020 at AH=59h)
  3253. Notes:    if device type is disk drive, DS:SI must point at either a null string
  3254.       or a string consisting the drive letter followed by a colon; if a
  3255.       null string, the network attempts to access the destination without
  3256.       redirecting a local drive
  3257.     the DOS kernel calls INT 2F/AX=111Eh with AX on top of the stack
  3258.     also supported by Banyan VINES, LANtastic, and 10NET
  3259. SeeAlso: AX=5F02h,AX=5F04h,INT 2F/AX=111Eh,INT 60/AX=0002h
  3260. --------D-215F04-----------------------------
  3261. INT 21 - DOS 3.1+ network - CANCEL REDIRECTION
  3262.     AX = 5F04h
  3263.     DS:SI -> ASCIZ local device name or path
  3264.     CX = 4E57h ("NW") for NetWare 4.0 requester
  3265. Return: CF clear if successful
  3266.     CF set on error
  3267.         AX = error code (01h,03h,05h,08h,0Fh,12h) (see #1020 at AH=59h)
  3268. Notes:    the DS:SI string must be either a local device name, a drive letter
  3269.       followed by a colon, or a network directory beginning with two
  3270.       backslashes
  3271.     the DOS kernel calls INT 2F/AX=111Eh with AX on top of the stack
  3272.     also supported by Banyan VINES, LANtastic, and 10NET
  3273.     for NetWare, if only a server name is specified (i.e. "\\SERVER"),
  3274.       the connection to that server will be closed
  3275. SeeAlso: AX=5F03h,INT 2F/AX=111Eh,INT 60/AX=0003h
  3276. --------D-215F05-----------------------------
  3277. INT 21 - DOS 4.0+ network - GET EXTENDED REDIRECTION LIST ENTRY
  3278.     AX = 5F05h
  3279.     BX = redirection list index
  3280.     DS:SI -> buffer for ASCIZ source device name
  3281.     ES:DI -> buffer for destination ASCIZ network path
  3282. Return: CF set on error
  3283.         AX = error code (see #1020 at AH=59h/BX=0000h)
  3284.     CF clear if successful
  3285.         AX = server's network process ID handle (10NET)
  3286.         BH = device status flag (bit 0 clear if valid)
  3287.         BL = device type (03h if printer, 04h if drive)
  3288.         CX = stored parameter value (user data) from AX=5F03h
  3289.         BP = NETBIOS local session number
  3290.         DS:SI buffer filled
  3291.         ES:DI buffer filled
  3292. Notes:    the local session number allows sharing the redirector's session number
  3293.     if an error is caused on the NETBIOS LSN, the redirector may be unable
  3294.       to correctly recover from errors
  3295.     the DOS kernel calls INT 2F/AX=111Eh with AX on top of the stack
  3296.     supported by DR DOS 5.0
  3297.     also supported by 10NET v5.0
  3298. SeeAlso: AX=5F06h"Network",INT 2F/AX=111Eh
  3299. --------O-215F05-----------------------------
  3300. INT 21 - STARLITE architecture - MAP LOCAL DRIVE LETTER TO REMOTE FILE SYSTEM
  3301.     AX = 5F05h
  3302.     DL = drive number (0=A:)
  3303.     DS:SI -> ASCIZ name of the object to map the drive to
  3304. Return: CF set on error
  3305.         AX = error code (see #1020 at AH=59h/BX=0000h)
  3306.     CF clear if successful
  3307. SeeAlso: AX=5F06h"STARLITE",INT 60/AX=0002h
  3308. --------N-215F06-----------------------------
  3309. INT 21 U - Network - GET FULL REDIRECTION LIST
  3310.     AX = 5F06h
  3311.     ???
  3312. Return: ???
  3313. Notes:    similar to AX=5F02h and AX=5F05h, but also returns redirections
  3314.       excluded from those calls for various reasons
  3315.     calls INT 2F/AX=111Eh with AX on top of the stack
  3316. SeeAlso: AX=5F05h"DOS",INT 2F/AX=111Eh
  3317. --------O-215F06-----------------------------
  3318. INT 21 - STARLITE architecture - UNMAP DRIVE LETTER
  3319.     AX = 5F06h
  3320.     DL = drive to be unmapped (0=A:)
  3321. Return: CF set on error
  3322.         AX = error code (see #1020 at AH=59h/BX=0000h)
  3323.     CF clear if successful
  3324. SeeAlso: AX=5F05h"STARLITE",INT 60/AX=0003h
  3325. --------D-215F07-----------------------------
  3326. INT 21 - DOS 5+ - ENABLE DRIVE
  3327.     AX = 5F07h
  3328.     DL = drive number (0=A:)
  3329. Return: CF clear if successful
  3330.     CF set on error
  3331.         AX = error code (0Fh) (see #1020 at AH=59h/BX=0000h)
  3332. Notes:    simply sets the "valid" bit in the drive's CDS
  3333.     this function is not supported by Novell DOS 7 through at least
  3334.       Update 4, but support was added by Update 13
  3335. SeeAlso: AH=52h,AX=5F08h"DOS"
  3336. --------O-215F07-----------------------------
  3337. INT 21 - STARLITE architecture - MAKE NAMED OBJECT AVAILABLE ON NETWORK
  3338.     AX = 5F07h
  3339.     DS:SI -> ASCIZ name of object to offer to network
  3340.     ES:DI -> ASCIZ name under which object will be known on the network
  3341.         MUST begin with three slashes
  3342. Return: CF set on error
  3343.         AX = error code (see #1020 at AH=59h/BX=0000h)
  3344.     CF clear if successful
  3345. SeeAlso: AX=5F08h"STARLITE"
  3346. --------D-215F08-----------------------------
  3347. INT 21 - DOS 5+ - DISABLE DRIVE
  3348.     AX = 5F08h
  3349.     DL = drive number (0=A:)
  3350. Return: CF clear if successful
  3351.     CF set on error
  3352.         AX = error code (0Fh) (see #1020 at AH=59h/BX=0000h)
  3353. Notes:    simply clears the "valid" bit in the drive's CDS
  3354.     this function is not supported by Novell DOS 7 through at least
  3355.       Update 4, but support was added by Update 13
  3356. SeeAlso: AH=52h,AX=5F07h"DOS"
  3357. --------O-215F08-----------------------------
  3358. INT 21 - STARLITE architecture - REMOVE GLOBAL NETWORK NAME OF OBJECT
  3359.     AX = 5F08h
  3360.     DS:SI -> ASCIZ network name (not local name) of object to unshare
  3361. Return: CF set on error
  3362.         AX = error code (see #1020 at AH=59h/BX=0000h)
  3363.     CF clear if successful
  3364. SeeAlso: AX=5F07h"STARLITE"
  3365. --------O-215F09-----------------------------
  3366. INT 21 - STARLITE architecture - BIND TO NETWORK DEVICE
  3367.     AX = 5F09h
  3368.     DS:DX -> ASCIZ name of the device driver to attach to
  3369. Return: CF set on error
  3370.         AX = error code (see #1020 at AH=59h/BX=0000h)
  3371.     CF clear if successful
  3372. Note:    the STARLITE distributed file system can attach to multiple networks
  3373.       simultaneously
  3374. SeeAlso: AX=5F0Ah
  3375. --------O-215F0A-----------------------------
  3376. INT 21 - STARLITE architecture - DETACH FROM NETWORK DEVICE
  3377.     AX = 5F0Ah
  3378.     DS:DX -> ASCIZ name of device driver to detach from
  3379. Return: CF set on error
  3380.         AX = error code (see #1020 at AH=59h/BX=0000h)
  3381.     CF clear if successful
  3382. SeeAlso: AX=5F09h
  3383. --------N-215F30-----------------------------
  3384. INT 21 U - LAN Manager Enhanced DOS - GET REDIRECTOR VERSION
  3385.     AX = 5F30h
  3386. Return: AX = version (AH=major,AL=minor)
  3387. --------N-215F32-----------------------------
  3388. INT 21 u - Named Pipes - LOCAL DosQNmPipeInfo
  3389.     AX = 5F32h
  3390.     BX = handle
  3391.     CX = size of _PIPEINFO structure
  3392.     DX = level (must be 0001h)
  3393.     DS:SI -> _PIPEINFO structure (see #1041)
  3394. Return: CF clear if successful
  3395.         _PIPEINFO structure filled in
  3396.     CF set on error
  3397.         AX = error code
  3398. Note:    this function was introduced by LAN Manager but is also supported by
  3399.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  3400.       Machines, and others
  3401. SeeAlso: AX=5F33h,AX=5F34h
  3402.  
  3403. Format of Named Pipes _PIPEINFO structure:
  3404. Offset    Size    Description    (Table 1041)
  3405.  00h    WORD    size of outgoing buffer
  3406.  02h    WORD    size of incoming buffer
  3407.  04h    BYTE    maximum number of instances allowed
  3408.  05h    BYTE    current number of instances
  3409.  06h    BYTE    length of the name (including terminating NUL)
  3410.  07h  N BYTEs    name
  3411. --------N-215F33-----------------------------
  3412. INT 21 u - Named Pipes - LOCAL DosQNmPHandState
  3413.     AX = 5F33h
  3414.     BX = handle
  3415. Return: CF clear if successful
  3416.         AH = pipe mode bit mask (see #1042)
  3417.         AL = maximum number of instances
  3418.     CF set on error
  3419.         AX = error code
  3420. Note:    this function was introduced by LAN Manager but is also supported by
  3421.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  3422.       Machines, and others
  3423. SeeAlso: AX=5F32h,AX=5F34h
  3424.  
  3425. Bitfields for Named Pipes pipe mode:
  3426. Bit(s)    Description    (Table 1042)
  3427.  7    set if nonblocking, clear if blocking
  3428.  6    set if server end, clear if client end
  3429.  2    set if write in message mode, clear if write in byte mode
  3430.  0    set if read in message mode, clear if read in byte mode
  3431. --------N-215F34-----------------------------
  3432. INT 21 u - Named Pipes - LOCAL DosSetNmPHandState
  3433.     AX = 5F34h
  3434.     BX = handle
  3435.     CX = pipe mode bit mask
  3436.         bit 15: set if nonblocking, clear if blocking
  3437.         bit     8: set if read in message mode, clear if read in byte mode
  3438. Return: CF clear if successful
  3439.     CF set if error
  3440.         AX = error code
  3441. Note:    this function was introduced by LAN Manager but is also supported by
  3442.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  3443.       Machines, and others
  3444. SeeAlso: AX=5F32h,AX=5F33h,AX=5F36h
  3445. --------N-215F35-----------------------------
  3446. INT 21 u - Named Pipes - LOCAL DosPeekNmPipe
  3447.     AX = 5F35h
  3448.     BX = handle
  3449.     CX = buffer length
  3450.     DS:SI -> buffer
  3451. Return: CF set on error
  3452.         AX = error code
  3453.     CF clear if successful (LAN Manager v1-v2)
  3454.     AX = 0000h if successful (LAN Manager 3.x)
  3455.     ---if successful---
  3456.         CX = bytes read
  3457.         SI = bytes left in the pipe
  3458.         DX = bytes left in the current message
  3459.         AX = pipe status (v1-v2) (see #1043)
  3460.         DI = pipe status (v3.x)
  3461. Note:    this function was introduced by LAN Manager but is also supported by
  3462.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  3463.       Machines, and others
  3464. SeeAlso: AX=5F38h,AX=5F39h,AX=5F51h
  3465.  
  3466. (Table 1043)
  3467. Values for pipe status:
  3468.  0001h    disconnected
  3469.  0002h    listening
  3470.  0003h    connected
  3471.  0004h    closing
  3472. --------N-215F36-----------------------------
  3473. INT 21 u - Named Pipes - LOCAL DosTransactNmPipe
  3474.     AX = 5F36h
  3475.     BX = handle
  3476.     CX = in buffer length
  3477.     DS:SI -> in buffer
  3478.     DX = out buffer length
  3479.     ES:DI -> out buffer
  3480. Return: CF clear if successful
  3481.         CX = bytes read
  3482.     CF set on error
  3483.         AX = error code
  3484. Note:    this function was introduced by LAN Manager but is also supported by
  3485.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  3486.       Machines, and others
  3487. SeeAlso: AX=5F34h,AX=5F37h
  3488. --------N-215F37-----------------------------
  3489. INT 21 u - Named Pipes - DosCallNmPipe
  3490.     AX = 5F37h
  3491.     DS:SI -> DosCallNmPipe stack frame (see #1044)
  3492. Return: CF clear if successful
  3493.         CX = bytes read
  3494.     CF set on error
  3495.         AX = error code
  3496. Note:    this function was introduced by LAN Manager but is also supported by
  3497.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  3498.       Machines, and others
  3499. SeeAlso: AX=5F36h,AX=5F38h
  3500.  
  3501. Format of Named Pipes DosCallNmPipe stack frame:
  3502. Offset    Size    Description    (Table 1044)
  3503.  00h    DWORD    timeout
  3504.  04h    DWORD    -> bytes read WORD (not used!)
  3505.  08h    WORD    out buffer length
  3506.  0Ah    DWORD    address of out buffer
  3507.  0Eh    WORD    in buffer length
  3508.  10h    DWORD    address of in buffer
  3509.  14h    DWORD    address of pipe name
  3510. --------N-215F38-----------------------------
  3511. INT 21 u - Named Pipes - LOCAL DosWaitNmPipe - AWAIT AVAIL. OF PIPE INSTANCE
  3512.     AX = 5F38h
  3513.     DS:DX -> pipe name
  3514.     BX:CX = timeout value
  3515. Return: CF clear if successful
  3516.     CF set if error
  3517.         AX = error code
  3518. Notes:    when a client gets a return code of ERROR_PIPE_BUSY on attempting to
  3519.       open a pipe, it should issue this call to wait until the pipe
  3520.       instance becomes available again; on return from this call, the
  3521.       client must attempt to open the pipe once again
  3522.     this function was introduced by LAN Manager but is also supported by
  3523.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  3524.       Machines, and others
  3525. SeeAlso: AX=5F37h,AX=5F39h
  3526. --------N-215F39-----------------------------
  3527. INT 21 U - Named Pipes - LOCAL DosRawReadNmPipe
  3528.     AX = 5F39h
  3529.     BX = handle
  3530.     CX = buffer length
  3531.     DS:DX -> buffer
  3532. Return: CF clear if successful
  3533.         CX = bytes read
  3534.     CF set if error
  3535.         AX = error code
  3536. Notes:    this function was introduced by LAN Manager but is also supported by
  3537.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  3538.       Machines, and others
  3539.     not documented in the LAN Manager Toolkit
  3540. SeeAlso: AX=5F35h,AX=5F3Ah,INT 2F/AX=1186h
  3541. --------N-215F3A-----------------------------
  3542. INT 21 U - Named Pipes - LOCAL DosRawWriteNmPipe
  3543.     AX = 5F3Ah
  3544.     BX = handle
  3545.     CX = buffer length
  3546.     DS:DX -> buffer
  3547. Return: CF clear if successful
  3548.         CX = bytes written
  3549.     CF set if error
  3550.         AX = error code
  3551. Notes:    this function was introduced by LAN Manager but is also supported by
  3552.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  3553.       Machines, and others
  3554.     not documented in the LAN Manager Toolkit
  3555. SeeAlso: AX=5F39h,AX=5F3Bh,INT 2F/AX=118Fh
  3556. --------N-215F3B-----------------------------
  3557. INT 21 u - LAN Manager Enhanced DOS - NetHandleSetInfo
  3558.     AX = 5F3Bh
  3559.     BX = handle
  3560.     CX = handle_info_1 structure length or sizeof DWORD
  3561.     DI = parameter number to set
  3562.         0000h all
  3563.         0001h number of milliseconds
  3564.         0002h number of characters
  3565.     DS:DX -> handle_info_1 structure (DI=0000h) (see #1045)
  3566.         or DWORD (DI=0001h or 0002h)
  3567.     SI = level of information (0001h)
  3568. Return: CF clear if successful
  3569.         CX = total bytes available
  3570.     CF set if error
  3571.         AX = error code
  3572. SeeAlso: AX=5F3Ch
  3573.  
  3574. Format of LAN Manager handle_info_1 structure:
  3575. Offset    Size    Description    (Table 1045)
  3576.  00h    DWORD    number of milliseconds which workstation collects data before
  3577.           it sends the data to the named pipe
  3578.  04h    DWORD    number of characters which workstation collects before it
  3579.           sends the data to the named pipe
  3580. --------N-215F3C-----------------------------
  3581. INT 21 u - LAN Manager Enhanced DOS - NetHandleGetInfo
  3582.     AX = 5F3Ch
  3583.     BX = handle
  3584.     CX = length of handle_info_1 structure
  3585.     DS:DX -> handle_info_1 structure (see #1045)
  3586.     SI = level of information (must be 0001h)
  3587. Return: CF clear if successful
  3588.         CX = total bytes available
  3589.     CF set if error
  3590.         AX = error code
  3591. SeeAlso: AX=5F3Bh
  3592. --------N-215F3D-----------------------------
  3593. INT 21 U - LAN Manager Enhanced DOS - WRITE MAILSLOT???
  3594.     AX = 5F3Dh
  3595.     ???
  3596. Return: ???
  3597. --------N-215F3E-----------------------------
  3598. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetSpecialSMB
  3599.     AX = 5F3Eh
  3600.     ???
  3601. Return: ???
  3602. Note:    This function is not documented anywhere in the LAN Manager 2.x Toolkit
  3603.       but was documented in LAN Manager 1.x manuals.
  3604. --------N-215F3F-----------------------------
  3605. INT 21 U - LAN Manager Enhanced DOS - REMOTE API CALL
  3606.     AX = 5F3Fh
  3607.     CX = api number
  3608.     ES:DI -> data descriptor
  3609.     ES:SI -> parameter descriptor
  3610.     ES:DX -> auxiliary descriptor (if DX <> 0)
  3611.     ???
  3612. Return: ???
  3613. --------N-215F40-----------------------------
  3614. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetMessageBufferSend
  3615.     AX = 5F40h
  3616.     DS:DX -> NetMessageBufferSend parameter structure (see #1046)
  3617. Return: AX = error code
  3618.  
  3619. Format of LAN Manager NetMessageBufferSend parameter structure:
  3620. Offset    Size    Description    (Table 1046)
  3621.  00h    DWORD    -> recipient name (name for specific user, name* for domain
  3622.               wide name, * for broadcast)
  3623.  04h    DWORD    -> buffer
  3624.  08h    WORD    length of buffer
  3625. --------N-215F41-----------------------------
  3626. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetServiceEnum
  3627.     AX = 5F41h
  3628.     BL = level of detail (0000h, 0001h or 0002h)
  3629.     CX = buffer length
  3630.     ES:DI -> buffer of service_info_0, service_info_1, or service_info_2
  3631.         (see #1047,#1048,#1049)
  3632. Return: CF clear if successful
  3633.         CX = entries read
  3634.         DX = total available
  3635.     CF set on error
  3636.         AX = error code
  3637.  
  3638. Format of LAN Manager service_info_0 structure:
  3639. Offset    Size    Description    (Table 1047)
  3640.  00h 16 BYTEs    name
  3641. SeeAlso: #1048,#1049
  3642.  
  3643. Format of service_info_1 structure:
  3644. Offset    Size    Description    (Table 1048)
  3645.  00h 16 BYTEs    name
  3646.  10h    WORD    status bitmask (see #1050)
  3647.  12h    DWORD    status code (see #1051)
  3648.         (also see Microsoft LAN Manager Programmer's Reference)
  3649.  16h    WORD    process id
  3650. SeeAlso: #1047,#1049
  3651.  
  3652. Format of service_info_2 structure:
  3653. Offset    Size    Description    (Table 1049)
  3654.  00h 16 BYTEs    name
  3655.  10h    WORD    status bitmask (see #1050)
  3656.  12h    DWORD    status code (see #1051)
  3657.  16h    WORD    process id
  3658.  18h 64 BYTEs    text
  3659. SeeAlso: #1047,#1048
  3660.  
  3661. Bitfields for LAN Manager status bitmask:
  3662. Bit(s)    Description    (Table 1050)
  3663.  0,1    00 uninstall
  3664.         01 install pending
  3665.         10 uninstall pending
  3666.         11 installed
  3667.  2,3    00 active
  3668.         01 Continue pending
  3669.         10 Pause pending
  3670.         11 paused
  3671.  4    uninstallable
  3672.  5    pausable
  3673.  8    disk redirector paused
  3674.  9    spooled device redirector paused (printing)
  3675.  10    communication device redirector paused
  3676.  
  3677. (Table 1051)
  3678. Values for LAN Manager status code:
  3679.  high word
  3680.     3051 Bad parameter value
  3681.     3052 A parameter is missing
  3682.     3053 An unknown parameter was specified
  3683.     3054 The resource is insufficient
  3684.     3055 Configuration is faulty
  3685.     3056 An MS-DOS or MS OS/2 error occured
  3686.     3057 An internal error occured
  3687.     3058 An ambiguous parameter name was given
  3688.     3059 A duplicate parameter exists
  3689.     3060 The service was terminated by NetSeviceControl when it did not respond
  3690.     3061 The service program file could not be executed
  3691.     3062 The subservice failed to start
  3692.     3063 There is a conflict in the value or use of these parameters
  3693.     3064 There is a problem with the file
  3694.  low word
  3695.     3070 There is insufficient memory
  3696.     3071 There is insufficeient disk space
  3697.     3072 Unable to create thread
  3698.     3073 Unable to create process
  3699.     3074 A security failure occured
  3700.     3075 There is bad or missing default path
  3701.     3076 Network software is not installed
  3702.     3077 Server software is not installed
  3703.     3078 The server could not access the UAS database
  3704.     3079 The action requires user-level security
  3705.     3080 The log directory is invalid
  3706.     3081 The LAN group specificed could not be used
  3707.     3082 The computername is being used as a message alias on another computer
  3708.     3083 The workstation failed to announce the servername
  3709.     3084 The user accounts system is not configured properly
  3710. --------N-215F42-----------------------------
  3711. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetServiceControl
  3712.     AX = 5F42h
  3713.     DH = opcode
  3714.         00h interrogate status
  3715.         01h pause
  3716.         02h continue
  3717.         03h uninstall
  3718.     DL = argument
  3719.         01h disk resource
  3720.         02h print resource
  3721.         04h communications resource (not implemented for DOS)
  3722.     ES:BX -> NetServiceControl parameter structure (see #1052)
  3723. Return: CF clear if successful
  3724.     CF set on error
  3725.         AX = error code
  3726.  
  3727. Format of LAN Manager NetServiceControl parameter structure:
  3728. Offset    Size    Description    (Table 1052)
  3729.  00h    DWORD    -> service name
  3730.  04h    WORD    result buffer size
  3731.  06h    DWORD    -> result buffer as service_info_2 structure
  3732. --------N-215F43-----------------------------
  3733. INT 21 u - LAN Manager Enhanced DOS - LOCAL DosPrintJobGetId
  3734.     AX = 5F43h
  3735.     BX = handle of remote print job
  3736.     CX = size of PRIDINFO struture
  3737.     ES:DI -> PRIDINFO structure (see #1053)
  3738. Return: CF clear if successful
  3739.         PRIDINFO filled in
  3740.     CF set on error
  3741.         AX = error code
  3742.  
  3743. Format of LAN Manager PRIDINFO structure:
  3744. Offset    Size    Description    (Table 1053)
  3745.  00h    WORD    job id
  3746.  02h 16 BYTEs    server name
  3747.  12h 13 BYTEs    queue name
  3748.  1Fh  1 BYTE    pad
  3749. --------N-215F44-----------------------------
  3750. INT 21 - LAN Manager Enhanced DOS - LOCAL NetWkstaGetInfo
  3751.     AX = 5F44h
  3752.     BX = information level (00h, 01h, or 0Ah)
  3753.     CX = buffer size
  3754.     DX = 0000h
  3755.     ES:DI -> buffer in which to store info (see #1054,#1055,#1056),
  3756.           including any returned strings
  3757. Return: AX = error code
  3758.     DX = amount of buffer required, unchanged if supplied buffer large
  3759.           enough to hold data
  3760. SeeAlso: AX=5F45h,AX=5F49h
  3761.  
  3762. Format of LAN Manager wksta_info_0 structure:
  3763. Offset    Size    Description    (Table 1054)
  3764.  00h    WORD     reserved (0)
  3765.  02h    DWORD     reserved (0)
  3766.  06h    DWORD     -> path to computer's LANMAN directory
  3767.  0Ah    DWORD     -> computername of the workstation
  3768.  0Eh    DWORD     -> username of user logged onto workstation
  3769.  12h    DWORD     -> domain to which workstation belongs
  3770.  16h    WORD     LAN Manager version number (2 bytes, Major, Minor)
  3771.  18h    DWORD     reserved (0)
  3772.  1Ch    WORD     number of seconds workstation waits for resource availability
  3773.  1Eh    DWORD     delay (in millsecs) before sending data to resource
  3774.  22h    WORD     reserved (0)
  3775.  24h    WORD     reserved (0)
  3776.  26h    WORD     ???
  3777.  28h    WORD     number of seconds to maintain an inactive connection
  3778.  2Ah    WORD     number of seconds an inactive search continues
  3779.  2Ch    WORD     threads to dedicate to network (not supported in MSDOS)
  3780.  2Eh    WORD     number of simultaneous commands sent to network
  3781.  30h    WORD     reserved6 (must be 0)
  3782.  32h    WORD     number of internal buffers
  3783.  34h    WORD     size (in bytes) of each internal buffer
  3784.  36h    WORD     max size (in bytes) of an internal cache buffer (not MSDOS)
  3785.  38h    WORD     seconds before disconnecting inactive session (not MSDOS)
  3786.  3Ah    WORD     size (in bytes) of an internal error buffer (not MSDOS)
  3787.  3Ch    WORD     number of clients that can receive alert messages (not MSDOS)
  3788.  3Eh    WORD     number of services that can be started on workstation
  3789.  40h    WORD     max size (in kilobytes) of error log (not MSDOS)
  3790.  42h    WORD     number of secs before closing inactive print jobs (not MSDOS)
  3791.  44h    WORD     number of character buffers for workstation
  3792.  46h    WORD     max size (in bytes) of character buffer
  3793.  48h    DWORD     -> name of server that validated logon
  3794.  4Ch    DWORD     -> workstation heuristics
  3795.  50h    WORD     number of mailslots allowed
  3796. Note:    pointers to strings are set to 0000h:0000h if there is insufficient
  3797.       space in the buffer to hold them
  3798. SeeAlso: #1055,#1056
  3799.  
  3800. Format of LAN Manager wksta_info_1 structure:
  3801. Offset    Size    Description    (Table 1055)
  3802.  00h 82 BYTEs    wksta_info_0 structure (see #1054)
  3803.  52h    DWORD     -> name of domain which user is logged on to
  3804.  56h    DWORD     -> all domains in which computer is enlisted
  3805.  5Ah    WORD     number of buffers to allocate for receiving datagrams
  3806. SeeAlso: #1056
  3807.  
  3808. Format of LAN Manager wksta_info_10 structure:
  3809. Offset    Size    Description    (Table 1056)
  3810.  00h    DWORD     -> computername of the workstation
  3811.  04h    DWORD     -> username of user logged onto workstation
  3812.  08h    DWORD     -> domain to which workstation belongs
  3813.  0Ch    WORD     LAN Manager version number (2 bytes, Major, Minor)
  3814.  0Eh    DWORD     -> name of domain which user is loggod on to
  3815.  12h    DWORD     -> all domains in which computer is enlisted
  3816. Note:    pointers to strings are set to 0000h:0000h if there is insufficient
  3817.       space in the buffer to hold them
  3818. SeeAlso: #1054,#1055
  3819. --------N-215F45-----------------------------
  3820. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetWkstaSetInfo
  3821.     AX = 5F45h
  3822.     BX = level (0000h or 0001h)
  3823.     CX = buffer size
  3824.     DX = parameter to set
  3825.     ES:DI -> buffer
  3826. Return: CF clear if successful
  3827.     CF set if error
  3828.         AX = error code
  3829. SeeAlso: AX=5F44h
  3830. --------N-215F46-----------------------------
  3831. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetUseEnum
  3832.     AX = 5F46h
  3833.     BX = level (0000h or 0001h)
  3834.     CX = size of buffer
  3835.     ES:DI -> buffer of use_info_0 or use_info_1 structures
  3836.           (see #1057,#1058)
  3837. Return: CF clear if successful
  3838.         CX = entries read
  3839.         DX = total available entries
  3840.     CF set if error
  3841.         AX = error code
  3842. SeeAlso: AX=5F47h,AX=5F48h,AX=5F4Ch
  3843.  
  3844. Format of LAN Manager use_info_0 structure:
  3845. Offset    Size    Description    (Table 1057)
  3846.  00h  9 BYTEs    local device name
  3847.  09h    BYTE    padding
  3848.  0Ah    DWORD    -> remote device name in UNC form \\server\share
  3849. SeeAlso: #1058
  3850.  
  3851. Format of LAN Manager use_info_1 structure:
  3852. Offset    Size    Description    (Table 1058)
  3853.  00h  9 BYTEs    Local device name
  3854.  09h    BYTE    padding
  3855.  0Ah    DWORD    -> remote device name in UNC form \\server\share
  3856.  0Eh    DWORD    -> password
  3857.  12h    WORD    network link status
  3858.         (00h OK, 02h disconnected, else unsure)
  3859.  14h    WORD    use type (-1 wildcard, 0 disk, 1 print, 2 com, 3 ipc)
  3860.  16h    WORD    ignored
  3861.  18h    WORD    ignored
  3862. SeeAlso: #1057
  3863. --------N-215F47-----------------------------
  3864. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetUseAdd
  3865.     AX = 5F47h
  3866.     BX = level (0001h)
  3867.     CX = size of use_info_1 structure
  3868.     ES:DI -> use_info_1 structure (see #1058)
  3869. Return: CF clear on success
  3870.     CF set on error
  3871.         AX = error code
  3872. SeeAlso: AX=5F46h,AX=5F48h
  3873. --------N-215F48-----------------------------
  3874. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetUseDel
  3875.     AX = 5F48h
  3876.     BX = force level
  3877.         0000h no force
  3878.         0001h force
  3879.         0002h lots of force
  3880.     ES:DI -> buffer as either the local device name or UNC remote name
  3881. Return: CF clear on success
  3882.     CF set on error
  3883.         AX = error code
  3884. SeeAlso: AX=5F46h,AX=5F48h,AX=5F49h
  3885. --------N-215F49-----------------------------
  3886. INT 21 u - LAN Manager Enhanced DOS - NetUseGetInfo
  3887.     AX = 5F49h
  3888.     DS:DX -> NetUseGetInfo parameter structure (see #1059)
  3889. Return: CF clear on success
  3890.         DX = total available
  3891.     CF set on error
  3892.         AX = error code
  3893. SeeAlso: AX=5F44h,AX=5F47h
  3894.  
  3895. Format of LAN Manager NetUseGetInfo parameter structure:
  3896. Offset    Size    Description    (Table 1059)
  3897.  00h    DWORD    pointer to either the local device name or UNC remote name
  3898.  04h    WORD    level of information (0000h or 0001h)
  3899.  06h    DWORD    pointer to buffer of use_info_0 or use_info_1 structures
  3900.  0Ah    WORD    length of buffer
  3901. --------N-215F4A-----------------------------
  3902. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetRemoteCopy
  3903.     AX = 5F4Ah
  3904.     DS:DX -> NetRemoteCopy parameter structure (see #1060)
  3905. Return: CF clear if successful
  3906.     CF set on error
  3907.         AX = error code
  3908. SeeAlso: AX=5F4Bh
  3909.  
  3910. Format of LAN Manager NetRemoteCopy parameter structure:
  3911. Offset    Size    Description    (Table 1060)
  3912.  00h    DWORD    -> source name as UNC
  3913.  04h    DWORD    -> destination name as UNC
  3914.  08h    DWORD    -> source password
  3915.  0Ch    DWORD    -> destination password
  3916.  10h    WORD    destination open bitmap
  3917.         if destination path exists
  3918.             0000h open fails
  3919.             0001h file is appended
  3920.             0002h file is overwritten
  3921.         if destination path doesn't exist
  3922.             0000h open fails
  3923.             0010h file is created
  3924.  12h    WORD    copy control bitmap (see #1061)
  3925.  14h    DWORD    -> copy_info buffer
  3926.  18h    WORD    length of copy_info buffer
  3927.  
  3928. Bitfields for LAN Manager copy control:
  3929. Bit(s)    Description    (Table 1061)
  3930.  0    destination must be a file
  3931.  1    destination must be a directory
  3932.  2    destination is opened in ascii mode instead of binary
  3933.  3    source is opened in ascii mode instead of binary
  3934.  4    verify all write operations
  3935. --------N-215F4B-----------------------------
  3936. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetRemoteMove
  3937.     AX = 5F4Bh
  3938.     DS:DX -> NetRemoteMove parameter structure (see #1062)
  3939. Return: CF clear if successful
  3940.     CF set on error
  3941.         AX = error code
  3942. SeeAlso: AX=5F4Ah
  3943.  
  3944. Format of LAN Manager NetRemoteMove parameter structure:
  3945. Offset    Size    Description    (Table 1062)
  3946.  00h    DWORD    -> source name as UNC
  3947.  04h    DWORD    -> destination name as UNC
  3948.  08h    DWORD    -> source password
  3949.  0Ch    DWORD    -> destination password
  3950.  10h    WORD    destination open bitmap
  3951.         if destination path exists
  3952.             0000h open fails
  3953.             0001h file is appended
  3954.             0002h file is overwritten
  3955.         if destination path doesn't exist
  3956.             0000h open fails
  3957.             0010h file is created
  3958.  12h    WORD    move control bitmap
  3959.             0001h destination must be a file
  3960.             0002h destination must be a directory
  3961.  14h    DWORD    -> move_info buffer
  3962.  18h    WORD    length of move_info buffer
  3963. --------N-215F4C-----------------------------
  3964. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetServerEnum
  3965.     AX = 5F4Ch
  3966.     BX = level (0000h or 0001h)
  3967.     CX = buffer length
  3968.     ES:DI -> buffer in which to store information
  3969. Return: CF clear if successful
  3970.         ES:DI -> server_info_X structures (depending on level)
  3971.           (see #1063,#1064)
  3972.         BX = entries read
  3973.         CX = total entries available
  3974.     CF set on error
  3975.         AX = error code
  3976. Notes:    this function is also supported by the Novell DOS Named Pipe Extender
  3977.     this function has been obseleted by NetServerEnum2
  3978. SeeAlso: AX=5F53h
  3979.  
  3980. Format of LAN Manager server_info_0 structure:
  3981. Offset    Size    Description    (Table 1063)
  3982.  00h 16 BYTEs    name
  3983. SeeAlso: #1064
  3984.  
  3985. Format of LAN Manager server_info_1 structure:
  3986. Offset    Size    Description    (Table 1064)
  3987.  00h 16 BYTEs    name
  3988.  10h    BYTE    major version in lower nibble
  3989.  11h    BYTE    minor version
  3990.  12h    DWORD    server type bitmask (see #1065)
  3991.  16h    DWORD    -> comment string
  3992. SeeAlso: #1063
  3993.  
  3994. Bitfields for LAN Manager server type:
  3995. Bit(s)    Description    (Table 1065)
  3996.  0    workstation
  3997.  1    server
  3998.  2    SQL server
  3999.  3    primary domain controller
  4000.  4    backup domain controller
  4001.  5    time server
  4002.  6    Apple File Protocol (AFP) server
  4003.  7    Novell server
  4004.  8    Domain Member (v2.1+)
  4005.  9    Print Queue server (v2.1+)
  4006.  10    Dialin server (v2.1+)
  4007.  11    Unix server (v2.1+)
  4008. --------N-215F4D-----------------------------
  4009. INT 21 u - LAN Manager Enhanced DOS - DosMakeMailslot
  4010.     AX = 5F4Dh
  4011.     BX = message size
  4012.     CX = mailslot size (must be bigger than message size by at least 1)
  4013.                (minimum 1000h, maximum FFF6h)
  4014.                (buffer must be 9 bytes bigger than this)
  4015.     DS:SI -> name
  4016.     ES:DI -> memory buffer
  4017. Return: CF clear if successful
  4018.         AX = handle
  4019.     CF set on error
  4020.         AX = error code
  4021. SeeAlso: AX=5F4Eh,AX=5F4Fh,AX=5F50h,AX=5F51h
  4022. --------N-215F4E-----------------------------
  4023. INT 21 u - LAN Manager Enhanced DOS - DosDeleteMailslot
  4024.     AX = 5F4Eh
  4025.     BX = handle
  4026. Return: CF clear if successful
  4027.         ES:DI -> memory to be freed (allocated during DosMakeMailslot)
  4028.     CF set on error
  4029.         AX = error code
  4030. SeeAlso: AX=5F4Dh,AX=5F4Fh
  4031. --------N-215F4F-----------------------------
  4032. INT 21 u - LAN Manager Enhanced DOS - DosMailslotInfo
  4033.     AX = 5F4Fh
  4034.     BX = handle
  4035. Return: CF clear if successful
  4036.         AX = max message size
  4037.         BX = mailslot size
  4038.         CX = next message size
  4039.         DX = next message priority
  4040.         SI = number of messages waiting
  4041.     CF set on error
  4042.         AX = error code
  4043. SeeAlso: AX=5F4Dh,AX=5F4Eh,AX=5F50h
  4044. --------N-215F50-----------------------------
  4045. INT 21 u - LAN Manager Enhanced DOS - DosReadMailslot
  4046.     AX = 5F50h
  4047.     BX = handle
  4048.     DX:CX = timeout
  4049.     ES:DI -> buffer
  4050. Return: CF clear if successful
  4051.         AX = bytes read
  4052.         CX = next item's size
  4053.         DX = next item's priority
  4054.     CF set on error
  4055.         AX = error code
  4056. SeeAlso: AX=5F4Dh,AX=5F4Fh,AX=5F51h,AX=5F52h
  4057. --------N-215F51-----------------------------
  4058. INT 21 u - LAN Manager Enhanced DOS - DosPeekMailslot
  4059.     AX = 5F51h
  4060.     BX = handle
  4061.     ES:DI -> buffer
  4062. Return: CF clear if successful
  4063.         AX = bytes read
  4064.         CX = next item's size
  4065.         DX = next item's priority
  4066.     CF set on error
  4067.         AX = error code
  4068. SeeAlso: AX=5F35h,AX=5F4Fh,AX=5F50h,AX=5F52h
  4069. --------N-215F52-----------------------------
  4070. INT 21 u - LAN Manager Enhanced DOS - DosWriteMailslot
  4071.     AX = 5F52h
  4072.     BX = class
  4073.     CX = length of buffer
  4074.     DX = priority
  4075.     ES:DI -> DosWriteMailslot parameter structure (see #1066)
  4076.     DS:SI -> mailslot name
  4077. Return: CF clear if successful
  4078.     CF set on error
  4079.         AX = error code
  4080. SeeAlso: AX=5F4Fh,AX=5F50h,AX=5F51h
  4081.  
  4082. Format of LAN Manager DosWriteMailslot parameter structure:
  4083. Offset    Size    Description    (Table 1066)
  4084.  00h    DWORD    timeout
  4085.  04h    DWORD    -> buffer
  4086. --------N-215F53-----------------------------
  4087. INT 21 u - LAN Manager Enhanced DOS - NetServerEnum2
  4088.     AX = 5F53h
  4089.     DS:SI -> NetServerEnum2 parameter structure (see #1067)
  4090. Return: CF clear if successful
  4091.         BX = entries read
  4092.         CX = total entries available
  4093.     CF set on error
  4094.         AX = error code
  4095. SeeAlso: AX=5F4Ch
  4096.  
  4097. Format of LAN Manager NetServerEnum2 parameter structure:
  4098. Offset    Size    Description    (Table 1067)
  4099.  00h    WORD    level (0000h or 0001h)
  4100.  02h    DWORD    -> buffer as array of server_info_??? structures (see #1069)
  4101.  06h    WORD    length of buffer
  4102.  08h    DWORD    server type bitmask (see #1068)
  4103.  0Ch    DWORD    -> Domain name (may be 0000h:0000h for all local domains)
  4104.  
  4105. Bitfields for LAN Manager server type:
  4106. Bit(s)    Description    (Table 1068)
  4107.  0    workstation
  4108.  1    server
  4109.  2    SQL server
  4110.  3    primary domain controller
  4111.  4    backup domain controller
  4112.  5    time server
  4113.  6    Apple File Protocol (AFP) server
  4114.  7    Novell server
  4115.  8    Domain Member (v2.1+)
  4116.  9    Print Queue server (v2.1+)
  4117.  10    Dialin server (v2.1+)
  4118.  11    Unix server (v2.1+)
  4119. Note:    set all (FFFFFFFFh) for All Types
  4120.  
  4121. Format of LAN Manager server_info_0 structure:
  4122. Offset    Size    Description    (Table 1069)
  4123.  00h 16 BYTEs    name
  4124. SeeAlso: #1070
  4125.  
  4126. Format of LAN Manager server_info_1 structure:
  4127. Offset    Size    Description    (Table 1070)
  4128.  00h 16 BYTEs    name
  4129.  10h    BYTE    major version in lower nibble
  4130.  11h    BYTE    minor version
  4131.  12h    DWORD    server type (bits 0-11) (see #1068)
  4132.  16h    DWORD    -> comment string
  4133. SeeAlso: #1069
  4134. --------N-215F55----------------------------
  4135. INT 21 U - LAN Manager Enhanced DOS - KILL ALL CONNECTIONS???
  4136.     AX = 5F55h
  4137.     BX = ???
  4138. Return: CF clear if successful
  4139.     CF set on error
  4140.         AX = error code
  4141. --------N-215F80-----------------------------
  4142. INT 21 - LANtastic - GET LOGIN ENTRY
  4143.     AX = 5F80h
  4144.     BX = login entry index (0-based)
  4145.     ES:DI -> 16-byte buffer for machine name
  4146. Return: CF clear if successful
  4147.         buffer filled with machine name ("\\" prefix removed)
  4148.         DL = adapter number (v3+)
  4149.     CF set on error
  4150.         AX = error code
  4151. Note:    the login entry index corresponds to the value BX used in AX=5F83h
  4152. SeeAlso: AX=5F83h
  4153. --------N-215F81-----------------------------
  4154. INT 21 - LANtastic - LOGIN TO SERVER
  4155.     AX = 5F81h
  4156.     ES:DI -> ASCIZ login path followed immediately by ASCIZ password
  4157.     BL = adapter number
  4158.         FFh try all valid adapters
  4159.         00h-07h try only specified adapter
  4160. Return: CF clear if successful
  4161.     CF set on error
  4162.         AX = error code
  4163. Notes:    login path is of form "\\machine\username"
  4164.     if no password is used, the string at ES:DI must be terminated with
  4165.       three NULs for compatibility with LANtastic v3.0.
  4166. SeeAlso: AX=5F82h,AX=5F84h
  4167. --------N-215F82-----------------------------
  4168. INT 21 - LANtastic - LOGOUT FROM SERVER
  4169.     AX = 5F82h
  4170.     ES:DI -> ASCIZ server name (in form "\\machine")
  4171. Return: CF clear if successful
  4172.     CF set on error
  4173.         AX = error code
  4174. SeeAlso: AX=5F81h,AX=5F88h,AX=5FCBh
  4175. --------N-215F83-----------------------------
  4176. INT 21 - LANtastic - GET USERNAME ENTRY
  4177.     AX = 5F83h
  4178.     BX = login entry index (0-based)
  4179.     ES:DI -> 16-byte buffer for username currently logged into
  4180. Return: CF clear if successful
  4181.         DL = adapter number (v3+)
  4182.     CF set on error
  4183.         AX = error code
  4184. Note:    the login entry index corresponds to the value BX used in AX=5F80h
  4185. SeeAlso: AX=5F80h
  4186. --------N-215F84-----------------------------
  4187. INT 21 - LANtastic - GET INACTIVE SERVER ENTRY
  4188.     AX = 5F84h
  4189.     BX = server index not currently logged into
  4190.     ES:DI -> 16-byte buffer for server name which is available for logging
  4191.         in to ("\\" prefix omitted)
  4192. Return: CF clear if successful
  4193.         DL = adapter number to non-logged in server is on
  4194.     CF set on error
  4195.         AX = error code
  4196. SeeAlso: AX=5F81h
  4197. --------N-215F85-----------------------------
  4198. INT 21 - LANtastic - CHANGE PASSWORD
  4199.     AX = 5F85h
  4200.     ES:DI -> buffer containing "\\machine\oldpassword" 00h "newpassword"00h
  4201. Return: CF clear if successful
  4202.     CF set on error
  4203.         AX = error code
  4204. Notes:    must be logged into the named machine
  4205.     this function is illegal for group accounts
  4206. --------N-215F86-----------------------------
  4207. INT 21 - LANtastic - DISABLE ACCOUNT
  4208.     AX = 5F86h
  4209.     ES:DI -> ASCIZ machine name and password in form "\\machine\password"
  4210. Return: CF clear if successful
  4211.     CF set on error
  4212.         AX = error code
  4213. Note:    must be logged into the named machine and concurrent logins set to 1
  4214.       by NET_MGR.  Requires system manager to re-enable account.
  4215. --------N-215F87-----------------------------
  4216. INT 21 - LANtastic v3+ - GET ACCOUNT
  4217.     AX = 5F87h
  4218.     DS:SI -> 128-byte buffer for account information (see #1071)
  4219.     ES:DI -> ASCIZ machine name in form "\\machine"
  4220. Return: CF clear if successful
  4221.     CF set on error
  4222.         AX = error code
  4223.     BX destroyed
  4224. Note:    must be logged into the specified machine
  4225.  
  4226. Format of LANtastic user account structure:
  4227. Offset    Size    Description    (Table 1071)
  4228.  00h 16 BYTEs    blank-padded username (zero-padded for v4.x)
  4229.  10h 16 BYTEs    reserved (00h)
  4230.  20h 32 BYTEs    user description
  4231.  40h    BYTE    privilege bits (see #1072)
  4232.  41h    BYTE    maximum concurrent users
  4233.  42h 42 BYTEs    bit map for disallowed half hours, beginning on Sunday
  4234.         (bit set if half-hour not an allowed time)
  4235.  6Ch    WORD    internal (0002h)
  4236.  6Eh  2 WORDs    last login time
  4237.  72h  2 WORDs    account expiration date (MS-DOS-format year/month:day)
  4238.  76h  2 WORDs    password expiration date (0 = none)
  4239.  7Ah    BYTE    number of days to extend password after change (1-31)
  4240.         00h if no extension required
  4241. ---v3.x---
  4242.  7Bh  5 BYTEs    reserved
  4243. ---v4.x---
  4244.  7Bh    BYTE    storage for first letter of user name when deleted (first
  4245.           character is changed to 00h when deleting account)
  4246.  7Ch    BYTE    extended privileges
  4247.  7Dh  3 BYTEs    reserved
  4248.  
  4249. Bitfields for LANtastic privilege bits:
  4250. Bit(s)    Description    (Table 1072)
  4251.  7    bypass access control lists
  4252.  6    bypass queue protection
  4253.  5    treat as local process
  4254.  4    bypass mail protection
  4255.  3    allow audit entry creation
  4256.  2    system manager
  4257.  0    user cannot change password
  4258. --------N-215F88-----------------------------
  4259. INT 21 - LANtastic v4.0+ - LOGOUT FROM ALL SERVERS
  4260.     AX = 5F88h
  4261. Return: CF clear if successful
  4262.     CF set on error
  4263.         AX = error code
  4264. SeeAlso: AX=5F82h
  4265. --------N-215F97-----------------------------
  4266. INT 21 - LANtastic - COPY FILE
  4267.     AX = 5F97h
  4268.     CX:DX = number of bytes to copy (FFFFFFFFh = entire file)
  4269.     SI = source file handle
  4270.     DI = destination file handle
  4271. Return: CF clear if successful
  4272.         DX:AX = number of bytes copied
  4273.     CF set on error
  4274.         AX = error code
  4275. Note:    copy is performed by server
  4276. --------N-215F98-----------------------------
  4277. INT 21 - LANtastic - SEND UNSOLICITED MESSAGE
  4278.     AX = 5F98h
  4279.     DS:SI -> message buffer (see #1073)
  4280. Return: CF clear if successful
  4281.     CF set on error
  4282.         AX = error code
  4283. Note:    v4.1- return no errors
  4284. SeeAlso: AX=5F99h
  4285.  
  4286. Format of LANtastic message buffer:
  4287. Offset    Size    Description    (Table 1073)
  4288.  00h    BYTE    reserved
  4289.  01h    BYTE    message type
  4290.         00h general
  4291.         01h server warning
  4292.         02h-7Fh reserved
  4293.         80h-FFh user-defined
  4294.  02h 16 BYTEs    ASCIZ destination machine name
  4295.  12h 16 BYTEs    ASCIZ server name which user must be logged into
  4296.  22h 16 BYTEs    ASCIZ user name
  4297.  32h 16 BYTEs    ASCIZ originating machine name (filled in when received)
  4298.  42h 80 BYTEs    message text
  4299. --------N-215F99-----------------------------
  4300. INT 21 - LANtastic - GET LAST RECEIVED UNSOLICITED MESSAGE
  4301.     AX = 5F99h
  4302.     ES:DI -> messsage buffer (see #1073)
  4303. Return: CF clear if successful
  4304.     CF set on error
  4305.         AX = error code
  4306. SeeAlso: AX=5F98h
  4307. --------N-215F9A-----------------------------
  4308. INT 21 - LANtastic - GET MESSAGE PROCESSING FLAGS
  4309.     AX = 5F9Ah
  4310. Return: CF clear if successful
  4311.         DL = bits describing processing of received messages (see #1074)
  4312.     CF set on error
  4313.         AX = error code
  4314. SeeAlso: AX=5F9Bh,AX=5F9Ch,AX=5F9Dh
  4315.  
  4316. Bitfields for unsolicited message processing flags:
  4317. Bit(s)    Description    (Table 1074)
  4318.  0    beep before message is delivered
  4319.  1    deliver message to message service
  4320.  2    pop up message automatically (v3+)
  4321. --------N-215F9B-----------------------------
  4322. INT 21 - LANtastic - SET MESSAGE PROCESSING FLAGS
  4323.     AX = 5F9Bh
  4324.     DL = bits describing processing for received unsolicited messages
  4325.          (see #1074)
  4326. Return: CF clear if successful
  4327.     CF set on error
  4328.         AX = error code
  4329. SeeAlso: AX=5F9Ah,AX=5F9Eh
  4330. --------N-215F9C-----------------------------
  4331. INT 21 - LANtastic v3+ - POP UP LAST RECEIVED MESSAGE
  4332.     AX = 5F9Ch
  4333.     CX = time to leave on screen in clock ticks
  4334.     DH = 0-based screen line on which to place message
  4335. Return: CF clear if successful
  4336.     CF set on error
  4337.         AX = error code (0Bh)
  4338. Notes:    the original screen contents are restored when the message is removed
  4339.     the message will not appear, and an error will be returned, if the
  4340.       screen is in a graphics mode
  4341. SeeAlso: AX=5F9Ah
  4342. --------N-215F9D-----------------------------
  4343. INT 21 - LANtastic v4.1+ - GET REDIRECTOR CONTROL BITS
  4344.     AX = 5F9Dh
  4345. Return: DL = redirector control bits
  4346.         bit 7: set to notify on print job completion
  4347. SeeAlso: AX=5F9Ah,AX=5F9Eh
  4348. --------N-215F9E-----------------------------
  4349. INT 21 - LANtastic v4.1+ - SET REDIRECTOR CONTROL BITS
  4350.     AX = 5F9Eh
  4351.     DL = redirector control bits (see AX=5F9Dh)
  4352. Return: nothing
  4353. SeeAlso: AX=5F9Bh,AX=5F9Dh
  4354. --------N-215FA0-----------------------------
  4355. INT 21 - LANtastic - GET QUEUE ENTRY
  4356.     AX = 5FA0h
  4357.     BX = queue entry index (0000h is first entry)
  4358.     DS:SI -> buffer for queue entry (see #1075)
  4359.     ES:DI -> ASCIZ server name in form "\\name"
  4360. Return: CF clear if successful
  4361.     CF set on error
  4362.         AX = error code
  4363.     BX = entry index for next queue entry (BX-1 is current index)
  4364. SeeAlso: AX=5FA1h,AX=5FA2h
  4365.  
  4366. Format of LANtastic queue entry:
  4367. Offset    Size    Description    (Table 1075)
  4368.  00h    BYTE    status of entry (see #1076)
  4369.  01h    DWORD    size of spooled file
  4370.  05h    BYTE    type of entry (see #1077)
  4371.  06h    BYTE    output control (see #1078)
  4372.  07h    WORD    number of copies
  4373.  09h    DWORD    sequence number of queue entry
  4374.  0Dh 48 BYTEs    pathname of spooled file
  4375.  3Dh 16 BYTEs    user who spooled file
  4376.  4Dh 16 BYTEs    name of machine from which file was spooled
  4377.  5Dh    WORD    date file was spooled (see #1006 at AX=5700h)
  4378.  5Fh    WORD    time file was spooled (see #1005 at AX=5700h)
  4379.  61h 17 BYTEs    ASCIZ destination device or user name
  4380.  72h 48 BYTEs    comment field
  4381.  
  4382. (Table 1076)
  4383. Values for status of LANtastic queue entry:
  4384.  00h    empty
  4385.  01h    being updated
  4386.  02h    being held
  4387.  03h    waiting for despool
  4388.  04h    being despooled
  4389.  05h    canceled
  4390.  06h    spooled file could not be accessed
  4391.  07h    destination could not be accessed
  4392.  08h    rush job
  4393.  
  4394. (Table 1077)
  4395. Values for type of LANtastic queue entry:
  4396.  00h    printer queue file
  4397.  01h    message
  4398.  02h    local file
  4399.  03h    remote file
  4400.  04h    to remote modem
  4401.  05h    batch processor file
  4402.  
  4403. Bitfields for output control:
  4404. Bit(s)    Description    (Table 1078)
  4405.  6    don't delete (for mail)
  4406.  5    mail file contains voice mail (v3+)
  4407.  4    mail message has been read
  4408.  3    response has been requested for this mail
  4409. --------N-215FA1-----------------------------
  4410. INT 21 - LANtastic - SET QUEUE ENTRY
  4411.     AX = 5FA1h
  4412.     BX = handle of opened queue entry
  4413.     DS:SI -> queue entry (see #1075)
  4414. Return: CF clear if successful
  4415.     CF set on error
  4416.         AX = error code
  4417. Notes:    the only queue entry fields which may be changed are output control,
  4418.       number of copies, destination device, and comment
  4419.     the handle in BX is that from a create or open (INT 21/AH=3Ch,3Dh)
  4420.       call on the file "\\server\\@MAIL" or "\\server\@name" (for
  4421.       printer queue entries)
  4422. SeeAlso: AX=5FA0h,AX=5FA2h,AX=5FA9h
  4423. --------N-215FA2-----------------------------
  4424. INT 21 - LANtastic - CONTROL QUEUE
  4425.     AX = 5FA2h
  4426.     BL = control command
  4427.         00h start despooling (privileged)
  4428.         01h halt despooling (privileged)
  4429.         02h halt despooling at end of job (privileged)
  4430.         03h pause despooler at end of job (privileged)
  4431.         04h print single job (privileged)
  4432.         05h restart current job (privileged)
  4433.         06h cancel the current job
  4434.         07h hold queue entry
  4435.         08h release a held queue entry
  4436.         09h make queue entry a rushed job (privileged)
  4437.     CX:DX = sequence number to control (commands 06h-09h)
  4438.     DX = physical printer number (commands 00h-05h)
  4439.         00h-02h LPT1-LPT3
  4440.         03h,04h COM1,COM2
  4441.         other    all printers
  4442.     ES:DI -> ASCIZ server name in form "\\machine"
  4443. Return: CF clear if successful
  4444.     CF set on error
  4445.         AX = error code
  4446. --------N-215FA3-----------------------------
  4447. INT 21 - LANtastic v3+ - GET PRINTER STATUS
  4448.     AX = 5FA3h
  4449.     BX = physical printer number (00h-02h = LPT1-LPT3, 03h-04h = COM1-COM2)
  4450.     DS:SI -> buffer for printer status (see #1079)
  4451.     ES:DI -> ASCIZ server name in form "\\machine"
  4452. Return: CF clear if successful
  4453.     CF set on error
  4454.         AX = error code
  4455.     BX = next physical printer number
  4456. Note:    you must be logged in to the specified server
  4457.  
  4458. Format of LANtastic printer status:
  4459. Offset    Size    Description    (Table 1079)
  4460.  00h    BYTE    printer state (see #1080)
  4461.  01h    WORD    queue index of print job being despooled
  4462.         FFFFh if not despooling--ignore all following fields
  4463.  03h    WORD    actual characters per second being output
  4464.  05h    DWORD    number of characters actually output so far
  4465.  09h    DWORD    number of bytes read from spooled file so far
  4466.  0Dh    WORD    copies remaining to print
  4467.  
  4468. Bitfields for LANtastic printer state:
  4469. Bit(s)    Description    (Table 1080)
  4470.  7    printer paused
  4471.  0-6    0 printer disabled
  4472.     1 will stop at end of job
  4473.     2 print multiple jobs
  4474. --------N-215FA4-----------------------------
  4475. INT 21 - LANtastic v3+ - GET STREAM INFO
  4476.     AX = 5FA4h
  4477.     BX = 0-based stream index number
  4478.     DS:SI -> buffer for stream information (see #1081)
  4479.     ES:DI -> ASCIZ machine name in form "\\machine"
  4480. Return: CF clear if successful
  4481.     CF set on error
  4482.         AX = error code
  4483.     BX = next stream number
  4484. SeeAlso: AX=5FA5h
  4485.  
  4486. Format of LANtastic stream information:
  4487. Offset    Size    Description    (Table 1081)
  4488.  00h    BYTE    queueing of jobs for logical printer (0=disabled,other=enabled)
  4489.  01h 11 BYTEs    logical printer resource template (may contain ? wildcards)
  4490. --------N-215FA5-----------------------------
  4491. INT 21 - LANtastic v3+ - SET STREAM INFO
  4492.     AX = 5FA5h
  4493.     BX = 0-based stream index number
  4494.     DS:SI -> buffer containing stream information (see #1081)
  4495.     ES:DI -> ASCIZ machine name in form "\\machine"
  4496. Return: CF clear if successful
  4497.     CF set on error
  4498.         AX = error code
  4499. SeeAlso: AX=5FA4h
  4500. --------N-215FA7-----------------------------
  4501. INT 21 - LANtastic - CREATE USER AUDIT ENTRY
  4502.     AX = 5FA7h
  4503.     DS:DX -> ASCIZ reason code (max 8 bytes)
  4504.     DS:SI -> ASCIZ variable reason string (max 128 bytes)
  4505.     ES:DI -> ASCIZ machine name in form "\\machine"
  4506. Return: CF clear if successful
  4507.     CF set on error
  4508.         AX = error code
  4509. Note:    you must be logged in to the specified server and have the "U"
  4510.       privilege to execute this call
  4511. --------N-215FA9-----------------------------
  4512. INT 21 - LANtastic v4.1+ - SET EXTENDED QUEUE ENTRY
  4513.     AX = 5FA9h
  4514.     BX = handle of opened queue entry
  4515.     DS:SI -> queue entry (see #1075)
  4516. Return: CF clear if successful
  4517.     CF set on error
  4518.         AX = error code
  4519. Note:    functions exactly the same as AX=5FA1h except the spooled filename is
  4520.       also set.  This call supports direct despooling.
  4521. SeeAlso: AX=5FA1h
  4522. --------N-215FB0-----------------------------
  4523. INT 21 - LANtastic - GET ACTIVE USER INFORMATION
  4524.     AX = 5FB0h
  4525.     BX = server login entry index
  4526.     DS:SI -> buffer for active user entry (see #1082)
  4527.     ES:DI -> ASCIZ machine name in form "\\server"
  4528. Return: CF clear if successful
  4529.     CF set on error
  4530.         AX = error code
  4531.     BX = next login index
  4532. SeeAlso: AX=5FB2h
  4533.  
  4534. Format of LANtastic active user entry:
  4535. Offset    Size    Description    (Table 1082)
  4536.  00h    WORD    virtual circuit number
  4537.  02h    BYTE    login state (see #1083)
  4538.  03h    BYTE    last command issued (see #1084)
  4539.  04h  5 BYTEs    number of I/O bytes (40-bit unsigned number)
  4540.  09h  3 BYTEs    number of server requests (24-bit unsigned)
  4541.  0Ch 16 BYTEs    name of user who is logged in
  4542.  1Ch 16 BYTEs    name of remote logged in machine
  4543.  2Ch    BYTE    extended privileges (v4+???)
  4544.         bit 0: user cannot change his password
  4545.  2Dh    WORD    time left in minutes (0000h = unlimited) (v4+???)
  4546.  
  4547. Bitfields for login state:
  4548. Bit(s)    Description    (Table 1083)
  4549.  0    fully logged in
  4550.  1    remote program load login
  4551.  2    user has system manager privileges
  4552.  3    user can create audit entries
  4553.  4    bypass mail protection
  4554.  5    treat as local process
  4555.  6    bypass queue protection
  4556.  7    bypass access control lists
  4557.  
  4558. (Table 1084)
  4559. Values for last LANtastic command:
  4560.  00h    login
  4561.  01h    process termination
  4562.  02h    open file
  4563.  03h    close file
  4564.  04h    create file
  4565.  05h    create new file
  4566.  06h    create unique file
  4567.  07h    commit data to disk
  4568.  08h    read file
  4569.  09h    write file
  4570.  0Ah    delete file
  4571.  0Bh    set file attributes
  4572.  0Ch    lock byte range
  4573.  0Dh    unlock byte range
  4574.  0Eh    create subdirectory
  4575.  0Fh    remove subdirectory
  4576.  10h    rename file
  4577.  11h    find first matching file
  4578.  12h    find next matching file
  4579.  13h    get disk free space
  4580.  14h    get a queue entry
  4581.  15h    set a queue entry
  4582.  16h    control the queue
  4583.  17h    return login information
  4584.  18h    return link description
  4585.  19h    seek on file
  4586.  1Ah    get server's time
  4587.  1Bh    create audit entry
  4588.  1Ch    open file in multitude of modes
  4589.  1Dh    change password
  4590.  1Eh    disable account
  4591.  1Fh    local server file copy
  4592. ---v3+---
  4593.  20h    get username from account file
  4594.  21h    translate server's logical path
  4595.  22h    make indirect file
  4596.  23h    get indirect file contents
  4597.  24h    get physical printer status
  4598.  25h    get logical print stream info
  4599.  26h    set logical print stream info
  4600.  27h    get user's account record
  4601. ---v4+---
  4602.  28h    request server shutdown
  4603.  29h    cancel server shutdown
  4604.  2Ah    stuff server's keyboard
  4605.  2Bh    write then commit data to disk
  4606.  2Ch    set extended queue entry
  4607.  2Dh    terminate user from server
  4608.  2Eh    enable/disable logins
  4609.  2Fh    flush server caches
  4610.  30h    change username
  4611.  31h    get extended queue entry
  4612.     (same as get queue, but can return named fields blanked)
  4613. --------N-215FB1-----------------------------
  4614. INT 21 - LANtastic - GET SHARED DIRECTORY INFORMATION
  4615.     AX = 5FB1h
  4616.     DS:SI -> 64-byte buffer for link description
  4617.     ES:DI -> ASCIZ machine and shared directory name in form
  4618.          "\\machine\shared-resource"
  4619. Return: CF clear if successful
  4620.         CX = access control list privileges for requesting user (see #1085)
  4621.     CF set on error
  4622.         AX = error code
  4623.  
  4624. Bitfields for LANtastic access control list:
  4625. Bit(s)    Description    (Table 1085)
  4626.  4    (I) allow expansion of indirect files
  4627.  5    (A) allow attribute changing
  4628.  6    (P) allow physical access to device
  4629.  7    (E) allow program execution
  4630.  8    (N) allow file renaming
  4631.  9    (K) allow directory deletion
  4632.  10    (D) allow file deletion
  4633.  11    (L) allow file/directory lookups
  4634.  12    (M) allow directory creation
  4635.  13    (C) allow file creation
  4636.  14    (W) allow open for write and writing
  4637.  15    (R) allow open for read and reading
  4638. --------N-215FB2-----------------------------
  4639. INT 21 - LANtastic v3+ - GET USERNAME FROM ACCOUNT FILE
  4640.     AX = 5FB2h
  4641.     BX = username entry index (0 for first)
  4642.     DS:SI -> 16-byte buffer for username
  4643.     ES:DI -> ASCIZ server name in form "\\machine"
  4644. Return: CF clear if successful
  4645.     CF set on error
  4646.         AX = error code
  4647.     BX = next queue entry index
  4648. SeeAlso: AX=5FB0h
  4649. --------N-215FB3-----------------------------
  4650. INT 21 - LANtastic v3+ - TRANSLATE PATH
  4651.     AX = 5FB3h
  4652.     DS:SI -> 128-byte buffer for ASCIZ result
  4653.     ES:DI -> full ASCIZ path, including server name
  4654.     DX = types of translation to be performed
  4655.         bit 0: expand last component as indirect file
  4656.         bit 1: return actual path relative to server's physical disk
  4657. Return: CF clear if successful
  4658.     CF set on error
  4659.         AX = error code
  4660. Note:    always expands any indirect files along the path
  4661. SeeALso: AX=5FB4h,INT 21/AH=60h
  4662. --------N-215FB4-----------------------------
  4663. INT 21 - LANtastic v3+ - CREATE INDIRECT FILE
  4664.     AX = 5FB4h
  4665.     DS:SI -> 128-byte buffer containing ASCIZ contents of indirect file
  4666.     ES:DI -> full ASCIZ path of indirect file to create, incl machine name
  4667. Return: CF clear if successful
  4668.     CF set on error
  4669.         AX = error code
  4670. Note:    the contents of the indirect file may be any valid server-relative path
  4671. SeeAlso: AX=5FB3h,AX=5FB5h
  4672. --------N-215FB5-----------------------------
  4673. INT 21 - LANtastic v3+ - GET INDIRECT FILE CONTENTS
  4674.     AX = 5FB5h
  4675.     DS:SI -> 128-byte buffer for ASCIZ indirect file contents
  4676.     ES:DI -> full ASCIZ path of indirect file
  4677. Return: CF clear if successful
  4678.     CF set on error
  4679.         AX = error code
  4680. SeeAlso: AX=5FB4h
  4681. --------N-215FB6-----------------------------
  4682. INT 21 - LANtastic v4.1+ - SET AUTO-LOGIN DEFAULTS
  4683.     AX = 5FB6h
  4684.     ES:DI -> pointer to ASCIZ default user name, immediately followed by
  4685.         ASCIZ password
  4686.     BL = adapter number to use for default login attempt
  4687.         FFh try all valid adapters
  4688.         00h-05h try adapter 0-5 explicitly
  4689. Return: CF clear if successful
  4690.     CF set on error
  4691.         AX = error code
  4692. Notes:    call with ES:DI -> two nulls to disable auto-login
  4693. SeeAlso: AX=5FB7h
  4694. --------N-215FB7-----------------------------
  4695. INT 21 - LANtastic v4.1+ - GET AUTO-LOGIN DEFAULTS
  4696.     AX = 5FB7h
  4697.     ES:DI -> pointer to 16-byte buffer to store ASCIZ auto-login user name
  4698. Return: CF clear if successful
  4699.         DL = adapter number used for default login attempt
  4700.         FFh all valid adapters will be tried
  4701.         00h-05h specified adapter will be tried explicitly
  4702.     CF set on error
  4703.         AX = error code
  4704. SeeAlso: AX=5F81h,AX=5FB6h
  4705. --------N-215FC0-----------------------------
  4706. INT 21 - LANtastic - GET TIME FROM SERVER
  4707.     AX = 5FC0h
  4708.     DS:SI -> time block (see #1086)
  4709.     ES:DI -> ASCIZ server name to get time from
  4710. Return: CF clear if successful
  4711.     CF set on error
  4712.         AX = error code
  4713. SeeAlso: AH=E7h"Novell"
  4714.  
  4715. Format of LANtastic time block:
  4716. Offset    Size    Description    (Table 1086)
  4717.  00h    WORD    year
  4718.  02h    BYTE    day
  4719.  03h    BYTE    month
  4720.  04h    BYTE    minutes
  4721.  05h    BYTE    hour
  4722.  06h    BYTE    hundredths of second
  4723.  07h    BYTE    second
  4724. --------N-215FC8-----------------------------
  4725. INT 21 - LANtastic v4.0+ - SCHEDULE SERVER SHUTDOWN
  4726.     AX = 5FC8h
  4727.     ES:DI -> ASCIZ server name in form "\\machine"
  4728.     DS:SI -> ASCIZ reason string (80 characters)
  4729.     CX = number of minutes until shutdown (0 = immediate)
  4730.     DX = option flags (see #1087)
  4731. Return: CF clear if successful
  4732.     CF set on error
  4733.         AX = error code
  4734. SeeAlso: AX=5FC9h
  4735.  
  4736. Bitfields for LANtastic option flags:
  4737. Bit(s)    Description    (Table 1087)
  4738.  0    auto reboot
  4739.  1    do not notify users
  4740.  2    halt after shutdown
  4741.  3    shutdown due to power fail (used by UPS)
  4742.  4-7    reserved
  4743.  8-14    user definable
  4744.  15    reserved
  4745. --------N-215FC9-----------------------------
  4746. INT 21 - LANtastic v4.0+ - CANCEL SERVER SHUTDOWN
  4747.     AX = 5FC9h
  4748.     ES:DI -> ASCIZ server name in form "\\machine"
  4749. Return: CF clear if successful
  4750.     CF set on error
  4751.         AX = error code
  4752. Note:    you must have the "S" privilege to use this call
  4753. SeeAlso: AX=5FC8h
  4754. --------N-215FCA-----------------------------
  4755. INT 21 - LANtastic v4.0+ - STUFF SERVER KEYBOARD BUFFER
  4756.     AX = 5FCAh
  4757.     ES:DI -> ASCIZ server name in form "\\machine"
  4758.     DS:SI -> ASCIZ string to stuff (128 bytes)
  4759. Return: CF clear if successful
  4760.     CF set on error
  4761.         AX = error code
  4762. Note:    you must have the "S" privilege to use this call
  4763.     maximum number of characters that can be stuffed is determined by the
  4764.       server's RUN BUFFER SIZE.
  4765. SeeAlso: INT 16/AH=05h
  4766. --------N-215FCB-----------------------------
  4767. INT 21 - LANtastic v4.1+ - TERMINATE USER
  4768.     AX = 5FCBh
  4769.     ES:DI -> ASCIZ server name in form "\\machine"
  4770.     DS:SI -> blank-padded username.     A null char = wildcard.
  4771.     DS:DX -> blank-padded machine name.  A null char = wildcard.
  4772.     CX = minutes until termination (0 = immediate)
  4773. Return: CF clear if successful
  4774.     CF set on error
  4775.         AX = error code
  4776. Note:    you must have the "S" privilege to use this call
  4777.     you cannot log yourself out using this call
  4778. SeeAlso: AX=5F82h
  4779. --------N-215FCC-----------------------------
  4780. INT 21 - LANtastic v4.1+ - GET/SET SERVER CONTROL BITS
  4781.     AX = 5FCCh
  4782.     ES:DI -> ASCIZ server name in form "\\machine"
  4783.     CX = bit values (value of bits you want to set) (see #1088)
  4784.     DX = bit mask (bits you are interested in, 0 = get only) (see #1088)
  4785. Return: CF clear if successful
  4786.         CX = control bits after call (see #1088)
  4787.     CF set on error
  4788.         AX = error code
  4789. Note:    you must have the "S" privilege to SET, anyone can GET.
  4790.  
  4791. Bitfields for control bits:
  4792. Bit(s)    Description    (Table 1088)
  4793.  0    disable logins
  4794. --------N-215FCD-----------------------------
  4795. INT 21 - LANtastic v4.1+ - FLUSH SERVER CACHES
  4796.     AX = 5FCDh
  4797.     ES:DI -> ASCIZ server name in form "\\machine"
  4798. Return: CF clear if successful
  4799.     CF set on error
  4800.         AX = error code
  4801. Note:    you must have the "S" privilege to use this call.
  4802. --------N-215FD0-----------------------------
  4803. INT 21 - LANtastic - GET REDIRECTED PRINTER TIMEOUT
  4804.     AX = 5FD0h
  4805. Return: CF clear if successful
  4806.         CX = redirected printer timeout in clock ticks of 55ms
  4807.         0000h if timeout disabled
  4808.     CF set on error
  4809.         AX = error code
  4810. SeeAlso: AX=5FD1h
  4811. --------N-215FD1-----------------------------
  4812. INT 21 - LANtastic - SET REDIRECTED PRINTER TIMEOUT
  4813.     AX = 5FD1h
  4814.     CX = printer timeout in clock ticks of 55ms, 0000h to disable timeouts
  4815. Return: CF clear if successful
  4816.     CF set on error
  4817.         AX = error code
  4818. SeeAlso: AX=5FD0h
  4819. --------N-215FE0-----------------------------
  4820. INT 21 C - LANtastic - GET DOS SERVICE VECTOR
  4821.     AX = 5FE0h
  4822. Return: CF clear if successful
  4823.         ES:BX -> current FAR service routine
  4824.     CF set on error
  4825.         AX = error code
  4826. Note:    the service routine is called by the LANtastic redirector whenever DOS
  4827.       may safely be called, permitting external TSRs and drivers to hook
  4828.       into LANtastic's DOS busy flag checking
  4829. SeeAlso: AX=5FE1h,INT 28,INT 2A/AH=84h
  4830. --------N-215FE1-----------------------------
  4831. INT 21 - LANtastic - SET DOS SERVICE VECTOR
  4832.     AX = 5FE1h
  4833.     ES:BX -> FAR routine to call when DOS services are available
  4834. Return: CF clear if successful
  4835.     CF set on error
  4836.         AX = error code
  4837. Note:    new handler must chain to previous handler as its first action
  4838. SeeAlso: AX=5FE0h
  4839. --------N-215FE2-----------------------------
  4840. INT 21 - LANtastic - GET MESSAGE SERVICE VECTOR
  4841.     AX = 5FE2h
  4842. Return: CF clear if successful
  4843.         ES:BX -> current FAR message service routine
  4844.     CF set on error
  4845.         AX = error code
  4846. SeeAlso: AX=5FE0h,AX=5FE3h
  4847. --------N-215FE3-----------------------------
  4848. INT 21 - LANtastic - SET MESSAGE SERVICE VECTOR
  4849.     AX = 5FE3h
  4850.     ES:BX -> FAR routine for processing network messages
  4851. Return: CF clear if successful
  4852.     CF set on error
  4853.         AX = error code
  4854. Notes:    handler must chain to previous handler as its first action
  4855.     on invocation, ES:BX -> just-received message
  4856. SeeAlso: AX=5FE2h
  4857. --------D-2160-------------------------------
  4858. INT 21 - DOS 3.0+ - "TRUENAME" - CANONICALIZE FILENAME OR PATH
  4859.     AH = 60h
  4860.     DS:SI -> ASCIZ filename or path
  4861.     ES:DI -> 128-byte buffer for canonicalized name
  4862. Return: CF set on error
  4863.         AX = error code
  4864.         02h invalid component in directory path or drive letter only
  4865.         03h malformed path or invalid drive letter
  4866.         ES:DI buffer unchanged
  4867.     CF clear if successful
  4868.         AH = 00h or 3Ah (DOS 6.1/6.2 for character device)
  4869.         AL = destroyed (00h or 2Fh or 5Ch or last character of current
  4870.           directory on drive)
  4871.         buffer filled with qualified name of form D:\PATH\FILE.EXT or
  4872.           \\MACHINE\PATH\FILE.EXT
  4873. Desc:    determine the canonical name of the specified filename or path,
  4874.       corresponding to the undocumented TRUENAME command in COMMAND.COM
  4875. Notes:    the input path need not actually exist
  4876.     letters are uppercased, forward slashes converted to backslashes,
  4877.       asterisks converted to appropriate number of question marks, and
  4878.       file and directory names are truncated to 8.3 if necessary.  (DR DOS
  4879.       3.41 and 5.0 do not expand asterisks)
  4880.     '.' and '..' in the path are resolved
  4881.     filespecs on local drives always start with "d:", those on network
  4882.       drives always start with "\\"
  4883.     if path string is on a JOINed drive, the returned name is the one that
  4884.       would be needed if the drive were not JOINed; similarly for a
  4885.       SUBSTed, ASSIGNed, or network drive letter.    Because of this, it is
  4886.       possible to get a qualified name that is not legal under the current
  4887.       combination of SUBSTs, ASSIGNs, JOINs, and network redirections
  4888.     under DOS 3.3 through 6.00, a device name is translated differently if
  4889.       the device name does not have an explicit directory or the directory
  4890.       is \DEV (relative directory DEV from the root directory works
  4891.       correctly).  In these cases, the returned string consists of the
  4892.       unchanged device name and extension appended to the string X:/
  4893.       (forward slash instead of backward slash as in all other cases) where
  4894.       X is the default or explicit drive letter.
  4895.     under MS-DOS 7.0, this call returns the short name for any
  4896.       long-filename portions of the provided pathname or filename
  4897.     functions which take pathnames require canonical paths if invoked via
  4898.       INT 21/AX=5D00h
  4899.     supported by OS/2 v1.1 compatibility box
  4900.     NetWare 2.1x does not support characters with the high bit set; early
  4901.       versions of NetWare 386 support such characters except in this call.
  4902.       In addition, NetWare returns error code 3 for the path "X:\"; one
  4903.       should use "X:\." instead.
  4904.     Novell DOS 7 reportedly has difficulty with non-MS-DOS filenames on
  4905.       network drives, and can return "D:" instead of "SERVER/VOLUME"
  4906.     for DOS 3.3-6.0, the input and output buffers may be the same, as the
  4907.       canonicalized name is built in an internal buffer and copied to the
  4908.       specified output buffer as the very last step
  4909.     for DR DOS 6.0, this function is not automatically called when on a
  4910.       network.  Device drivers reportedly cannot make this call from their
  4911.       INIT function.  Using the same pointer for both input and output
  4912.       buffers is not supported in the April 1992 and earlier versions of
  4913.       DR DOS
  4914.     Windows for Workgroups 3.11, Windows95 and even MS-DOS 7.00 only
  4915.       return the local drive path; to obtain network paths use
  4916.       INT 21/AX=5F02h or INT 21/AX=5F46h instead
  4917.     Corel's CORELCDX and MSCDEX without the /S switch return canonical
  4918.       names of the form "\\D.\A.\path", where "D" is the CD-ROM drive
  4919.       letter and "A" appears to indicate the first physical CD-ROM drive;
  4920.       MSCDEX with the /S switch returns a canonical name with embedded
  4921.       blanks.  Novell DOS 7 NWCDEX as of the 11/16/94 update returns the
  4922.       same canonical path as MSCDEX; earlier revisions returned
  4923.       "Cdex.   D:\path", where "D" is the CD-ROM drive letter
  4924.     the Windows95 MSCDEX-replacement VxD returns "D:\path", even though the
  4925.       MS-DOS 7.00 MSCDEX behaves identically to older versions (above)
  4926. SeeAlso: AX=5F02h,AX=5FB3h,AX=7160h/CL=00h,INT 2F/AX=1123h,INT 2F/AX=1221h
  4927. --------D-2161-------------------------------
  4928. INT 21 - DOS 3.0+ - UNUSED (RESERVED FOR NETWORK USE)
  4929.     AH = 61h
  4930. Return: AL = 00h
  4931. Note:    this function does nothing and returns immediately
  4932. --------O-2161--BP6467-----------------------
  4933. INT 21 U - OS/2 v1.x FAPI - OS/2 FILE SYSTEM JOIN/SUBST
  4934.     AH = 61h
  4935.     BP = 6467h ("dg")
  4936.     AL = function
  4937.         00h list (i.e. get)
  4938.         01h add
  4939.         02h delete
  4940.     BX = drive number
  4941.     CX = size of buffer
  4942.     SI = type (0002h JOIN, 0003h SUBST)
  4943.     ES:DI -> buffer
  4944. Return: CF clear if successful
  4945.         AX = 0000h
  4946.         ES:DI buffer filled, if appropriate
  4947.     CF set on error
  4948.         AX = error code
  4949. Notes:    used by JOIN and SUBST to communicate with the OS/2 file system
  4950.     for function 00h (list), the ES:DI buffer is filled with the ASCIZ
  4951.       JOIN/SUBST path or an empty string if the drive is not JOINed/SUBSTed
  4952.     also supported by OS/2 v2.0+ Virtual DOS Machines
  4953. --------D-2162-------------------------------
  4954. INT 21 - DOS 3.0+ - GET CURRENT PSP ADDRESS
  4955.     AH = 62h
  4956. Return: BX = segment of PSP for current process
  4957. Notes:    this function does not use any of the DOS-internal stacks and may
  4958.       thus be called at any time, even during another INT 21h call
  4959.     the current PSP is not necessarily the caller's PSP
  4960.     identical to the undocumented AH=51h
  4961. SeeAlso: AH=50h,AH=51h
  4962. --------U-216262SI1994-----------------------
  4963. INT 21 - ENVLOCK - INSTALLATION CHECK
  4964.     AX = 6262h
  4965.     SI = 1994h
  4966. Return: AX = 1994h if installed
  4967.         ES = ENVLOCK's resident segment
  4968. Notes:    to deactivate ENVLOCK, zero out the byte at ES:[0102h]
  4969. Program: ENVLOCK is a TSR by Alexander Yanovsky (aka PC Hawk) that forces
  4970.       other TSRs to deallocate their environment when they stay resident
  4971. --------D-216300-----------------------------
  4972. INT 21 - DOS 2.25 only - GET LEAD BYTE TABLE ADDRESS
  4973.     AX = 6300h
  4974. Return: CF clear if successful
  4975.         DS:SI -> lead byte table (see #1089)
  4976.     CF set on error
  4977.         AX = error code (01h) (see #1020 at AH=59h/BX=0000h)
  4978. Notes:    does not preserve any registers other than SS:SP
  4979.     the US version of MS-DOS 3.30 treats this as an unused function,
  4980.       setting AL=00h and returning immediately
  4981. SeeAlso: AX=6301h,AH=07h,AH=08h,AH=0Bh
  4982.  
  4983. Format of double-byte character set lead byte table entry:
  4984. Offset    Size    Description    (Table 1089)
  4985.  00h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  4986.  02h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  4987.     ...
  4988.   N   2 BYTEs    00h,00h end flag
  4989. --------D-216300-----------------------------
  4990. INT 21 - DOS 3.2+ - GET DOUBLE BYTE CHARACTER SET LEAD-BYTE TABLE
  4991.     AX = 6300h
  4992. Return: AL = error code
  4993.         00h successful
  4994.         DS:SI -> DBCS table (see #1089)
  4995.         all other registers except CS:IP and SS:SP destroyed
  4996.         FFh not supported
  4997. Notes:    probably identical to AH=63h/AL=00h for DOS 2.25
  4998.     the US version of MS-DOS 3.30 treats this as an unused function,
  4999.       setting AL=00h and returning immediately, WITHOUT setting DS:SI;
  5000.       only the Far East versions of MS-DOS 3.2 and 3.3 supported this call
  5001.     the US version of DOS 4.0+ accepts this function, but returns an empty
  5002.       list
  5003.     IBM DOS 6.1 SYS.COM assumes that CF is set on error
  5004. SeeAlso: AX=6300h"DOS 2.25"
  5005. --------D-216301-----------------------------
  5006. INT 21 - DOS 2.25, DOS 3.2+ - SET KOREAN (HANGEUL) INPUT MODE
  5007.     AX = 6301h
  5008.     DL = new mode
  5009.         00h return only full characters on DOS keyboard input functions
  5010.         01h return partially-formed (interim) characters also
  5011. Return: AL = status
  5012.         00h successful
  5013.         FFh invalid mode
  5014. Notes:    Novell DOS 7 simply stores DL in the caller's PSP (see #0725 at AH=26h)
  5015.     the US version of MS-DOS 3.30 treats this as an unused function,
  5016.       setting AL=00h and returning immediately; only the Far East versions
  5017.       of MS-DOS 3.2 and 3.3 supported this call
  5018. SeeAlso: AH=07h,AH=08h,AH=0Bh,AX=6300h,AX=6302h
  5019. --------D-216302-----------------------------
  5020. INT 21 - DOS 2.25, DOS 3.2+ - GET KOREAN (HANGEUL) INPUT MODE
  5021.     AX = 6302h
  5022. Return: AL = status
  5023.         00h successful
  5024.         DL = current input mode
  5025.             00h return only full characters (clears interim flag)
  5026.             01h return partial characters (sets interim flag)
  5027.         FFh not supported
  5028. Notes:    Novell DOS 7 simply reads the value out of the caller's PSP, so it
  5029.       can return values other than 00h or 01h if the last call to AX=6301h
  5030.       used another value
  5031.     the US version of MS-DOS 3.30 treats this as an unused function,
  5032.       setting AL=00h and returning immediately, WITHOUT setting DL; only
  5033.       the Far East versions of MS-DOS 3.2 and 3.3 supported this call
  5034. SeeAlso: AH=07h,AH=08h,AH=0Bh,AX=6300h,AX=6301h
  5035. --------v-216303------------------------
  5036. INT 21 - VIRUS - "DOS IDLE" - INSTALLATION CHECK
  5037.     AX = 6303h
  5038. Return: BX = 6303h if resident
  5039. SeeAlso: AX=5643h"VIRUS",AX=6304h"VIRUS",AX=9AD5h"VIRUS"
  5040. --------v-216304------------------------
  5041. INT 21 - VIRUS - "Replicator" - INSTALLATION CHECK
  5042.     AX = 6304h
  5043. Return: BX = 6304h if resident
  5044. SeeAlso: AX=6303h"VIRUS",AX=6969h"VIRUS"
  5045. --------D-2164-------------------------------
  5046. INT 21 - DOS 3.2+ internal - SET DEVICE DRIVER LOOKAHEAD FLAG
  5047.     AH = 64h
  5048.     AL = flag
  5049.         00h (default) call device driver function 5 (non-dest read)
  5050.             before INT 21/AH=01h,08h,0Ah
  5051.         nonzero don't call driver function 5
  5052. Return: nothing (MS-DOS)
  5053.     CF set, AX=error code??? (DR DOS 5.0, which does not support this call)
  5054. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  5055.     under MS-DOS, this function does not use any of the DOS-internal stacks
  5056.       and may thus be called at any time, even during another DOS call
  5057. SeeAlso: AH=01h,AH=08h,AH=0Ah,AX=5D06h
  5058. --------O-2164--DX0000-----------------------
  5059. INT 21 U - OS/2 v2.0+ Virtual DOS Machine - ENABLE AUTOMATIC TITLE SWITCH
  5060.     AH = 64h
  5061.     DX = 0000h (function number)
  5062.     CX = 636Ch (magic value, "cl")
  5063.     BX = 0000h (indicates special request)
  5064. Note:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  5065.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  5066. SeeAlso: AH=64h/DX=0001h,INT 21/AH=4Bh
  5067. --------O-2164--DX0001-----------------------
  5068. INT 21 U - OS/2 v2.0+ Virtual DOS Machine - SET SESSION TITLE
  5069.     AH = 64h
  5070.     DX = 0001h (function number)
  5071.     CX = 636Ch (magic value, "cl")
  5072.     BX = 0000h (indicates special request)
  5073.     ES:DI -> new ASCIZ title (max 12 char) or "" to restore default title
  5074. Note:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  5075.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  5076. SeeAlso: AH=64h/DX=0000h,AH=64h/DX=0002h,INT 15/AH=12h/BH=05h
  5077. --------O-2164--DX0002-----------------------
  5078. INT 21 U - OS/2 v2.0+ Virtual DOS Machine - GET SESSION TITLE
  5079.     AH = 64h
  5080.     DX = 0002h (function number)
  5081.     CX = 636Ch (magic value, "cl")
  5082.     BX = 0000h (indicates special request)
  5083.     ES:DI -> 13-byte buffer for current title
  5084. Return: buffer filled (single 00h if title never changed)
  5085. Note:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  5086.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  5087. SeeAlso: AH=64h/DX=0000h,AH=64h/DX=0001h,INT 15/AH=12h/BH=05h
  5088. --------O-2164--DX0003-----------------------
  5089. INT 21 U - OS/2 v2.1 Virtual DOS Machine - GET LASTDRIVE
  5090.     AH = 64h
  5091.     DX = 0003h (function number)
  5092.     CX = 636Ch (magic value, "cl")
  5093.     BX = 0000h (indicates special request)
  5094. Return: AL = highest drive supported
  5095. Notes:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  5096.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  5097.     used by WinOS2
  5098.     not supported by OS/2 Warp 3.0, check list of lists instead (see #0968)
  5099. SeeAlso: AH=52h
  5100. --------O-2164--DX0004-----------------------
  5101. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET SIZE OF PTDA JFT
  5102.     AH = 64h
  5103.     DX = 0004h (function number)
  5104.     CX = 636Ch (magic value, "cl")
  5105.     BX = 0000h (indicates special request)
  5106. Return: AX = number of entries in OS/2 JFT for VDM
  5107. Notes:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  5108.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  5109.     in an OS/2 VDM, the DOS Job File Table in the PSP contains an index
  5110.       into the OS/2 JFT in the Per-Task Data Area rather than an SFT index
  5111.       because the OS/2 SFT can contain more than 255 entries
  5112. --------O-2164--DX0005-----------------------
  5113. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET SECOND SFT FLAGS WORD
  5114.     AH = 64h
  5115.     DX = 0005h (function number)
  5116.     CX = 636Ch (magic value, "cl")
  5117.     BX = 0000h (indicates special request)
  5118.     DI = DOS file handle
  5119. Return: AX = value of second flags word from OS/2 SFT entry for file
  5120. Notes:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  5121.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  5122.     the OS/2 SFT has two flags words rather than DOS's one word, and this
  5123.       function provides access to the word which is not present in DOS
  5124. --------O-2164--DX0006-----------------------
  5125. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - UNLOAD DOSKRNL SYMBOLS & LOAD PROGR
  5126.     AH = 64h
  5127.     DX = 0006h (function number)
  5128.     CX = 636Ch (magic value, "cl")
  5129.     BX = 0000h (indicates special request)
  5130.     ES:DI -> ASCIZ filespec
  5131.     DS = base address for loading
  5132. Notes:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  5133.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  5134.     this function is only supported by the kernel debugging version of
  5135.       OS2KRNL
  5136. --------O-2164--DX0007-----------------------
  5137. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET WinOS2 CALL GATE ADDRESS
  5138.     AH = 64h
  5139.     DX = 0007h (function number)
  5140.     CX = 636Ch (magic value, "cl")
  5141.     BX = 0000h (indicates special request)
  5142. Return: AX = call gate address
  5143. Notes:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  5144.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  5145.     used by WinOS2 to make direct calls to OS2KRNL, bypassing the overhead
  5146.       of DOSKRNL
  5147. --------O-2164--DX0008-----------------------
  5148. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET LOADING MESSAGE
  5149.     AH = 64h
  5150.     DX = 0008h (function number)
  5151.     CX = 636Ch (magic value, "cl")
  5152.     BX = 0000h (indicates special request)
  5153. Return: DS:DX -> '$'-terminated message "Loading.  Please wait."
  5154. Notes:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  5155.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  5156.     this function permits National Language Support for the initial message
  5157.       displayed while WinOS2 starts a full-screen session
  5158. --------O-2164--CX636C-----------------------
  5159. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - OS/2 API support
  5160.     AH = 64h
  5161.     CX = 636Ch ("cl")
  5162.     BX = API ordinal (see #1090)
  5163.     other registers as appropriate for API call
  5164. Return: as appropriate for API call
  5165. SeeAlso: AH=64h/BX=0025h,AH=64h/BX=00B6h,AH=64h/BX=00CBh
  5166.  
  5167. (Table 1090)
  5168. Values for OS/2 API ordinal:
  5169.  0025h    DOS32StartSession
  5170.  0082h    DosGetCP
  5171.  00B6h    DosQFSAttach
  5172.  00BFh    DosEditName
  5173.  00CBh    DosForceDelete
  5174.  0144h    Dos32CreateEventSem
  5175.  0145h    Dos32OpenEvenSem
  5176.  0146h    Dos32CloseEventSem
  5177.  0147h    Dos32ResetEventSem
  5178.  0148h    Dos32PostEventSem
  5179.  0149h    Dos32WaitEventSem
  5180.  014Ah    Dos32QueryEventSem
  5181.  014Bh    Dos32CreateMutexSem
  5182.  014Ch    Dos32OpenMutexSem
  5183.  014Dh    Dos32CloseMutexSem
  5184.  014Eh    Dos32RequestMutexSem
  5185.  014Fh    Dos32ReleaseMutexSem
  5186.  0150h    Dos32QueryMutexSem
  5187.  0151h    Dos32CreateMuxWaitSem
  5188.  0152h    Dos32OpenMuxWaitSem
  5189.  0153h    Dos32CloseMuxWaitSem
  5190.  0154h    Dos32WaitMuxWaitSem
  5191.  0155h    Dos32AddMuxWaitSem
  5192.  0156h    Dos32DeleteMuxWaitSem
  5193.  0157h    Dos32QueryMuxWaitSem
  5194. --------O-2164--BX0025-----------------------
  5195. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - OS/2 API DOS32StartSession
  5196.     AH = 64h
  5197.     BX = 0025h (API ordinal)
  5198.     CX = 636Ch ("cl")
  5199.     DS:SI -> STARTDATA structure (see #1091)
  5200. Return: AX = return code
  5201. SeeAlso: AH=64h/CX=636Ch,AH=64h/BX=00B6h
  5202.  
  5203. Format of OS/2 Virtual DOS Machine STARTDATA structure:
  5204. Offset    Size    Description    (Table 1091)
  5205.  00h    WORD    length of structure (must be 0018h,001Eh,0020h,0032h,or 003Ch)
  5206.  02h    WORD    relation of new process to caller (00h independent, 01h child)
  5207.  04h    WORD    fore/background (00h foreground, 01h background)
  5208.  06h    WORD    trace options (00h-02h, 00h = no trace)
  5209.  08h    DWORD    pointer to ASCIZ program title (max 62 chars) or 0000h:0000h
  5210.  0Ch    DWORD    pointer to ASCIZ program name (max 128 chars) or 0000h:0000h
  5211.  10h    DWORD    pointer to ASCIZ program args (max 144 chars) or 0000h:0000h
  5212.  14h    DWORD    "TermQ" (currently reserved, must be 00000000h)
  5213.  18h    DWORD    pointer to environment (max 486 bytes) or 0000h:0000h
  5214.  1Ch    WORD    inheritance (00h or 01h)
  5215.  1Eh    WORD    session type
  5216.         00h OS/2 session manager determines type (default)
  5217.         01h OS/2 full-screen
  5218.         02h OS/2 window
  5219.         03h PM
  5220.         04h VDM full-screen
  5221.         07h VDM window
  5222.  20h    DWORD    pointer to ASCIZ icon filename (max 128 chars) or 0000h:0000h
  5223.  24h    DWORD    "PgmHandle" (currently reserved, must be 00000000h)
  5224.  28h    WORD    "PgmControl"
  5225.  2Ah    WORD    initial column
  5226.  2Ch    WORD    initial row
  5227.  2Eh    WORD    initial width
  5228.  30h    WORD    initial height
  5229.  32h    WORD    reserved (0)
  5230.  34h    DWORD    "ObjectBuffer" (currently reserved, must be 00000000h)
  5231.  38h    DWORD    "ObjectBufferLen" (currently reserved, must be 00000000h)
  5232. --------O-2164--BX00B6-----------------------
  5233. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - OS/2 API DosQFSAttach
  5234.     AH = 64h
  5235.     BX = 00B6h (API ordinal)
  5236.     CX = 636Ch (magic value "cl")
  5237.     DS = user's data segment
  5238.     ES:DI -> FSQAttachStruc (see #1092)
  5239. Return: CF set on error
  5240.         AX = error code (see #1020 at AH=59h/BX=0000h)
  5241.     CF clear if successful
  5242.         AX = 0000h
  5243.         data buffer filled
  5244. SeeAlso: AH=64h/CX=636Ch
  5245.  
  5246. Format of OS/2 Virtual DOS Machine FSQAttachStruc:
  5247. Offset    Size    Description    (Table 1092)
  5248.  00h    DWORD    reserved
  5249.  04h    DWORD    pointer to the offset of the data buffer length
  5250.  08h    DWORD    pointer to the offset of the data buffer
  5251.  0Ch    WORD    FSA Info level
  5252.  0Eh    WORD    ordinal index into table
  5253.  10h    DWORD    pointer to the offset of the device name
  5254. Notes:    The segment value of the buffer, buffer length, and device
  5255.       name MUST all be the same.  It is defined on entry in the DS
  5256.       register.  The details of each info level are defined in the
  5257.       OS/2 CP Reference.
  5258. --------O-2164--BX00CB-----------------------
  5259. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - OS/2 API DosForceDelete
  5260.     AH = 64h
  5261.     BX = 00CBh (API ordinal)
  5262.     CX = 636Ch (magic value "cl")
  5263.     DS:DX -> ASCIZ filename
  5264. Return: CF clear if successful
  5265.         AX destroyed
  5266.     CF set on error
  5267.         AX = error code (02h,03h,05h) (see #1020 at AH=59h/BX=0000h)
  5268. Desc:    delete a file without saving it to the undelete directory
  5269. SeeAlso: AH=41h,AH=64h/CX=636Ch
  5270. --------D-2165-------------------------------
  5271. INT 21 - DOS 3.3+ - GET EXTENDED COUNTRY INFORMATION
  5272.     AH = 65h
  5273.     AL = info ID
  5274.         01h get general internationalization info
  5275.         02h get pointer to uppercase table
  5276.         04h get pointer to filename uppercase table
  5277.         05h get pointer to filename terminator table
  5278.         06h get pointer to collating sequence table
  5279.         07h (DOS 4.0+) get pointer to Double-Byte Character Set table
  5280.     BX = code page (FFFFh=global code page) (see #1099)
  5281.     DX = country ID (FFFFh=current country)
  5282.     ES:DI -> country information buffer (see #1093)
  5283.     CX = size of buffer (>= 5)
  5284. Return: CF set on error
  5285.         AX = error code (see #1020 at AH=59h/BX=0000h)
  5286.     CF clear if successful
  5287.         CX = size of country information returned
  5288.         ES:DI -> country information
  5289. Notes:    AL=05h appears to return same info for all countries and codepages; it
  5290.       has been documented for DOS 5+, but was undocumented in earlier
  5291.       versions
  5292.     NLSFUNC must be installed to get info for countries other than the
  5293.       default
  5294.     subfunctions 02h and 04h are identical under OS/2
  5295. SeeAlso: AH=38h,AH=70h"MS-DOS 7",INT 2F/AX=1401h,INT 2F/AX=1402h
  5296. SeeAlso: INT 2F/AX=14FEh
  5297.  
  5298. Format of country information:
  5299. Offset    Size    Description    (Table 1093)
  5300.  00h    BYTE    info ID
  5301. ---if info ID = 01h---
  5302.  01h    WORD    size
  5303.  03h    WORD    country ID (see #0747 at AH=38h)
  5304.  05h    WORD    code page (see #1099)
  5305.  07h 34 BYTEs    country-dependent info (see #0746 at AH=38h)
  5306. ---if info ID = 02h---
  5307.  01h    DWORD    pointer to uppercase table (see #1094)
  5308. ---if info ID = 04h---
  5309.  01h    DWORD    pointer to filename uppercase table (see #1095)
  5310. ---if info ID = 05h---
  5311.  01h    DWORD    pointer to filename character table (see #1096)
  5312. ---if info ID = 06h---
  5313.  01h    DWORD    pointer to collating table (see #1097)
  5314. ---if info ID = 07h (DOS 4.0+)---
  5315.  01h    DWORD    pointer to DBCS lead byte table (see #1098)
  5316. SeeAlso: #3320
  5317.  
  5318. Format of uppercase table:
  5319. Offset    Size    Description    (Table 1094)
  5320.  00h    WORD    table size
  5321.  02h 128 BYTEs    uppercase equivalents (if any) of chars 80h to FFh
  5322. SeeAlso: #1093,#1095
  5323.  
  5324. Format of filename uppercase table:
  5325. Offset    Size    Description    (Table 1095)
  5326.  00h    WORD    table size
  5327.  02h 128 BYTEs    uppercase equivalents (if any) of chars 80h to FFh
  5328. SeeAlso: #1093,#1094
  5329.  
  5330. Format of filename terminator table:
  5331. Offset    Size    Description    (Table 1096)
  5332.  00h    WORD    table size (not counting this word)
  5333.  02h    BYTE    ??? (01h for MS-DOS 3.30-6.00)
  5334.  03h    BYTE    lowest permissible character value for filename
  5335.  04h    BYTE    highest permissible character value for filename
  5336.  05h    BYTE    ??? (00h for MS-DOS 3.30-6.00)
  5337.  06h    BYTE    first excluded character in range \ all characters in this
  5338.  07h    BYTE    last excluded character in range  / range are illegal
  5339.  08h    BYTE    ??? (02h for MS-DOS 3.30-6.00)
  5340.  09h    BYTE    number of illegal (terminator) characters
  5341.  0Ah  N BYTEs    characters which terminate a filename:    ."/\[]:|<>+=;,
  5342. Note:    partially documented for DOS 5+, but undocumented for earlier versions
  5343. SeeAlso: #1093
  5344.  
  5345. Format of collating table:
  5346. Offset    Size    Description    (Table 1097)
  5347.  00h    WORD    table size
  5348.  02h 256 BYTEs    values used to sort characters 00h to FFh
  5349. SeeAlso: #1093
  5350.  
  5351. Format of DBCS lead byte table:
  5352. Offset    Size    Description    (Table 1098)
  5353.  00h    WORD    length
  5354.  02h 2N BYTEs    start/end for N lead byte ranges
  5355.     WORD    0000h    (end of table)
  5356. SeeAlso: #1093
  5357. --------D-2165-------------------------------
  5358. INT 21 - DOS 4.0+ - COUNTRY-DEPENDENT CHARACTER CAPITALIZATION
  5359.     AH = 65h
  5360.     AL = function
  5361.         20h capitalize character
  5362.         DL = character to capitalize
  5363.         Return: DL = capitalized character
  5364.         21h capitalize string
  5365.         DS:DX -> string to capitalize
  5366.         CX = length of string
  5367.         22h capitalize ASCIZ string
  5368.         DS:DX -> ASCIZ string to capitalize
  5369. Return: CF set on error
  5370.         AX = error code (see #1020 at AH=59h/BX=0000h)
  5371.     CF clear if successful
  5372. Note:    these calls have been documented for DOS 5+, but were undocumented in
  5373.       DOS 4.x.
  5374. --------D-216523-----------------------------
  5375. INT 21 U - DOS 4.0+ - DETERMINE IF CHARACTER REPRESENTS YES/NO RESPONSE
  5376.     AX = 6523h
  5377.     DL = character
  5378.     DH = second character of double-byte character (if applicable)
  5379. Return: CF set on error
  5380.     CF clear if successful
  5381.         AX = type
  5382.         00h no
  5383.         01h yes
  5384.         02h neither yes nor no
  5385. Note:    supported by Novell DOS 7, though prior to Update 14, the results
  5386.       depended on the kernel variant rather than the COUNTRY= setting
  5387. --------D-2165-------------------------------
  5388. INT 21 U - DOS 4.0+ internal - COUNTRY-DEPENDENT FILENAME CAPITALIZATION
  5389.     AH = 65h
  5390.     AL = function
  5391.         A0h capitalize filename character
  5392.         DL = character to capitalize
  5393.         Return: DL = capitalized character
  5394.         A1h capitalize counted filename string
  5395.         DS:DX -> filename string to capitalize
  5396.         CX = length of string
  5397.         A2h capitalize ASCIZ filename
  5398.         DS:DX -> ASCIZ filename to capitalize
  5399. Return: CF set on error
  5400.         AX = error code (see #1020 at AH=59h/BX=0000h)
  5401.     CF clear if successful
  5402. Note:    nonfunctional in MS-DOS 4.00 through 6.00 due to a bug (the code sets a
  5403.       pointer depending on the high bit of AL, but doesn't clear the
  5404.       bit before branching by function number).  Supported and
  5405.       functional(!) in Novell DOS 7 (Update 15)
  5406. --------D-216601-----------------------------
  5407. INT 21 - DOS 3.3+ - GET GLOBAL CODE PAGE TABLE
  5408.     AX = 6601h
  5409. Return: CF set on error
  5410.         AX = error code (see #1020 at AH=59h/BX=0000h)
  5411.     CF clear if successful
  5412.         BX = active code page (see #1099)
  5413.         DX = system code page (see #1099)
  5414. SeeAlso: AX=6602h
  5415. --------D-216602-----------------------------
  5416. INT 21 - DOS 3.3+ - SET GLOBAL CODE PAGE TABLE
  5417.     AX = 6602h
  5418.     BX = active code page (see #1099)
  5419.     DX = system code page (active page at boot time)
  5420. Return: CF set on error
  5421.         AX = error code (see #1020 at AH=59h/BX=0000h)
  5422.     CF clear if successful
  5423.         AX = EB41h (Novell NWDOS v7.0 when NLSFUNC not installed and
  5424.           request was for previously-active code page)
  5425. SeeAlso: AX=6601h,INT 2F/AX=14FFh
  5426.  
  5427. (Table 1099)
  5428. Values for code page:
  5429.  437    US
  5430.  850    Multilingual
  5431.  852    Slavic/Latin II (DOS 5+)
  5432.  857    Turkish
  5433.  860    Portugal
  5434.  861    Iceland
  5435.  863    Canada (French)
  5436.  865    Norway/Denmark
  5437.  
  5438. Format of DOS .CPI (Code Page Information) file header:
  5439. Offset    Size    Description    (Table 1100)
  5440.  00h    BYTE    ID tag
  5441.         FFh FONT file (Standard for generic display or
  5442.               printer font files used by MS-DOS, PC-DOS, DR DOS
  5443.               and Novell DOS)
  5444.         7Fh DRFONT file (Used by DR DOS 6.0 / Novell DOS 7 for
  5445.               enhanced & compressed display font files. DR DOS 6.0
  5446.               and Novell DOS 7 still support the standard FONT
  5447.               files, thus allowing leaning of .CPI files from
  5448.               MS-DOS to DR DOS / Novell DOS!)
  5449.  01h  7 BYTEs    ID string
  5450.         "FONT    " = FONT file (Standard for display or printer)
  5451.         "DRFONT " = DRFONT file (Enhanced compressed format used
  5452.                 by DR DOS 6.0 / Novell DOS 7 for display fonts)
  5453.  08h  8 BYTEs    reserved (0)
  5454.  10h    WORD    number of pointers (1)
  5455.  12h    BYTE    type of pointers (1)
  5456.  13h    DWORD    pointer to file offset of FontInfoHeader
  5457.         (Generally pointing to the byte just after FontFileHeader,
  5458.              that is 0000h:0017h. Due to extra data at offset 17h, this
  5459.              value has changed with DR DOS 6.0 / Novell DOS 7 DRFONTs!
  5460.              "MS-DOS 4.0 programmers reference" claimed word offset
  5461.              +15h as an endmarker (0000h), but actually it is the
  5462.              High-Word of the pointer.)
  5463. --- Extended FontFileHeader with DR DOS 6.0 / Novell DOS 7 DRFONTs: ---
  5464.  17h    BYTE    number of fonts per codepage supported by this file
  5465.              (N=4 with both DR DOS 6.0 / Novell DOS 7 DRFONT files)
  5466.  18h  N    BYTEs    cellsize (Height) of fonts 1..N
  5467.         the cellsize corresponds with the character boxes height,
  5468.           but is also the count of bytes used for each of the
  5469.           characters inside the font data (as currently all fonts
  5470.           are organized heightx8 and 8 pixel width is just one byte).
  5471.  var  N DWORDs    file offsets of DisplayFontData.
  5472.  
  5473. Format of DOS .CPI file Font Information Header:
  5474. Offset    Size    Description    (Table 1101)
  5475.  00h    WORD    number of codepage entries
  5476.     var    N codepage entry headers (see #1102)
  5477. SeeAlso: #1100
  5478.  
  5479. Format of DOS .CPI file CodePage Entry Header:
  5480. Offset    Size    Description    (Table 1102)
  5481.  00h    WORD    size of this header (normally 1Ch)
  5482.  02h    DWORD    offset of next entry, or 0000h:0000h or FFFFh:FFFFh if last
  5483.         (if a valid "next" pointer but all of the fonts indicated in
  5484.           the .CPI header have been processed, this field normally
  5485.           points at an optional text area at the end of the .CPI file
  5486.           containing copyright information)
  5487.  06h    WORD    device type
  5488.         01h display (FONT or DRFONT)
  5489.         02h printer (FONT)
  5490.  08h  8 BYTEs    blank-padded device name string
  5491.  10h    WORD    code page (see #1099)
  5492.  12h  3 WORDs    reserved (0)
  5493.  18h    DWORD    pointer to Font Data Header (see #0132)
  5494.         normally immediately follows this header
  5495. SeeAlso: #1100
  5496.  
  5497. Format of DOS .CPI file Font Data Header:
  5498. Offset    Size    Description    (Table 1103)
  5499.  00h    WORD    record type
  5500.         0001h FONT
  5501.         0002h DRFONT (DR-DOS 6.0/Novell DOS 7 display font)
  5502.  02h    WORD    number of fonts
  5503.  04h    WORD    length of font data (display fonts)
  5504.         ??? (printer fonts)
  5505.  06h    var    font data (#fonts * fontlength) bytes
  5506. SeeAlso: #1100
  5507.  
  5508. Format of DOS .CPI file ScreenFONT Header:
  5509. Offset    Size    Description    (Table 1104)
  5510.  00h  6 BYTEs    display-font header (see #1106)
  5511.  06h    var    display font data
  5512. SeeAlso: #1100
  5513.  
  5514. Format of .CPI file DRFONT Header:
  5515. Offset    Size    Description    (Table 1105)
  5516.  00h 6N BYTEs    DisplayFONT headers for N fonts (see #1106)
  5517.       M WORDs    character index table for cell offsets in font data
  5518.         currently 256 words in length
  5519. SeeAlso: #1100
  5520.  
  5521. Format of .CPI file DisplayFONT header:
  5522. Offset    Size    Description    (Table 1106)
  5523.  00h    BYTE    height of character cell
  5524.  01h    BYTE    width of character cell (currently always 08h)
  5525.  02h    BYTE    aspect ratio (height) (currently 00h, unused)
  5526.  03h    BYTE    aspect ratio (width) (currently 00h, unused)
  5527.  04h    WORD    number of characters per font (256)
  5528. SeeAlso: #1100
  5529.  
  5530. Format of .CPI file PrinterFONT header:
  5531. Offset    Size    Description    (Table 1107)
  5532.  00h    WORD    type of printer
  5533.         0001h (4201.CPI, 1050.CPI, EPS.CPI)
  5534.         0002h (4208.CPI, 5202.CPI, PPDS.CPI)
  5535.  02h    WORD    bytes per hardware/download codepage-select escape sequence
  5536.         (max 31, typically 12)
  5537.  04h  N BYTEs    escape sequence to select hardware codepage
  5538.       N BYTEs    escape sequence to select download codepage
  5539.     var    download data for printer font (including escape sequence to
  5540.           transfer data)
  5541. SeeAlso: #1100
  5542. --------D-2167-------------------------------
  5543. INT 21 - DOS 3.3+ - SET HANDLE COUNT
  5544.     AH = 67h
  5545.     BX = size of new file handle table for process
  5546. Return: CF clear if successful
  5547.     CF set on error
  5548.         AX = error code (see #1020 at AH=59h/BX=0000h)
  5549. Desc:    adjust the size of the per-process open file table, thus raising or
  5550.       lowering the limit on the number of files the caller can open
  5551.       simultaneously
  5552. Notes:    if BX <= 20, no action is taken if the handle limit has not yet been
  5553.       increased, and the table is copied back into the PSP if the limit
  5554.       is currently > 20 handles
  5555.     for file handle tables of > 20 handles, DOS 3.30 never reuses the
  5556.       same memory block, even if the limit is being reduced; this can lead
  5557.       to memory fragmentation as a new block is allocated and the existing
  5558.       one freed
  5559.     only the first 20 handles are copied to child processes in DOS 3.3-6.0
  5560.     increasing the file handles here will not, in general, increase the
  5561.       number of files that can be opened using the runtime library of a
  5562.       high-level language such as C
  5563.     Novell DOS 7 reportedly terminates the calling program if the JFT is
  5564.       being reduced in size and there are any open file handles beyond
  5565.       the portion of the JFT being retained
  5566. BUGS:    the original release of DOS 3.30 allocates a full 64K for the handle
  5567.       table on requests for an even number of handles
  5568.     DR DOS 3.41 and 5.0 will lose track of any open file handles beyond
  5569.       the portion of the JFT retained after the call; MS-DOS will indicate
  5570.       error 04h if any of the JFT entries to be removed are open
  5571. SeeAlso: AH=26h,AH=86h
  5572. --------D-2168-------------------------------
  5573. INT 21 - DOS 3.3+ - "FFLUSH" - COMMIT FILE
  5574.     AH = 68h
  5575.     BX = file handle
  5576. Return: CF clear if successful
  5577.         all data still in DOS disk buffers is written to disk immediately,
  5578.           and the file's directory entry is updated
  5579.     CF set on error
  5580.         AX = error code (see #1020 at AH=59h/BX=0000h)
  5581. SeeAlso: AX=5D01h,AH=6Ah,INT 2F/AX=1107h
  5582. --------D-2169-------------------------------
  5583. INT 21 U - DOS 4.0+ internal - GET/SET DISK SERIAL NUMBER
  5584.     AH = 69h
  5585.     AL = subfunction
  5586.         00h get serial number
  5587.         01h set serial number
  5588.     BL = drive (0=default, 1=A, 2=B, etc)
  5589.     BH = info level (00h only for DOS; OS/2 allows other levels)
  5590.     DS:DX -> disk info (see #1108)
  5591. Return: CF set on error
  5592.         AX = error code (see #1020 at AH=59h/BX=0000h)
  5593.     CF clear if successful
  5594.         AX destroyed
  5595.         (AL = 00h) buffer filled with appropriate values from extended BPB
  5596.         (AL = 01h) extended BPB on disk set to values from buffer
  5597. Notes:    does not generate a critical error; all errors are returned in AX
  5598.     error 0005h given if no extended BPB on disk
  5599.     does not work on network drives (error 0001h)
  5600.     buffer after first two bytes is exact copy of bytes 27h thru 3Dh of
  5601.       extended BPB on disk
  5602.     this function is supported under Novell NetWare versions 2.0A through
  5603.       3.11; the returned serial number is the one a DIR would display,
  5604.       the volume label is the NetWare volume label, and the file system
  5605.       is set to "FAT16".
  5606.     this function is not supported by Novell DOS 7 through Update 13, but
  5607.       Personal NetWare 1.0 does support this function
  5608.     the serial number is computed from the current date and time when the
  5609.       disk is created; the first part is the sum of the seconds/hundredths
  5610.       and month/day, the second part is the sum of the hours/minutes and
  5611.       year
  5612.     the volume label which is read or set is the one stored in the extended
  5613.       BPB on disks formatted with DOS 4.0+, rather than the special root
  5614.       directory entry used by the DIR command in COMMAND.COM (use AH=11h
  5615.       to find that volume label)
  5616. SeeAlso: AX=440Dh"DOS 3.2+"
  5617.  
  5618. Format of disk info:
  5619. Offset    Size    Description    (Table 1108)
  5620.  00h    WORD    0000h (info level)
  5621.  02h    DWORD    disk serial number (binary)
  5622.  06h 11 BYTEs    volume label or "NO NAME    " if none present
  5623.  11h  8 BYTEs    (AL=00h only) filesystem type (see #1109)
  5624.  
  5625. (Table 1109)
  5626. Values for filesystem type:
  5627.  "FAT12      "    12-bit FAT
  5628.  "FAT16      "    16-bit FAT
  5629.  "CDROM      "    High-Sierra CD-ROM filesystem
  5630.  "CD001      "    ISO 9660 CD-ROM filesystem
  5631.  "CDAUDIO "    audio CD
  5632. SeeAlso: #1108
  5633. --------O-2169-------------------------------
  5634. INT 21 - DR DOS 5.0 - NULL FUNCTION
  5635.     AH = 69h
  5636. Return: AL = 00h
  5637. SeeAlso: AH=18h
  5638. --------v-216969-----------------------------
  5639. INT 21 - VIRUS - "Rape-747" - INSTALLATION CHECK
  5640.     AX = 6969h
  5641. Return: AX = 0666h if resident
  5642. SeeAlso: AX=58CCh,AX=6304h"VIRUS",AH=76h"VIRUS"
  5643. --------d-2169FFDX0000-----------------------
  5644. INT 21 U - CUBIT v4.00 - GET CUBIT INT 21 HANDLER
  5645.     AX = 69FFh
  5646.     DX = 0000h
  5647.     BX = CB00h (magic value)
  5648. Return: ES:BX -> CUBITR.EXE handler for INT 21
  5649. Note:    the installation check consists of testing that the first eight bytes
  5650.       at the returned interrupt handler are EBh 07h "CUBITR" (a short
  5651.       jump around the signature followed by the signature); the byte
  5652.       following the signature (i.e. ES:[BX+8]) indicates whether CUBITR
  5653.       is active (01h) or disabled (00h)
  5654. SeeAlso: AX=69FFh/DX=CFBFh
  5655. Index:    installation check;CUBIT
  5656. --------d-2169FFDXCFBF-----------------------
  5657. INT 21 U - CUBIT v4.00 - UNINSTALL
  5658.     AX = 69FFh
  5659.     DX = CFBFh
  5660.     CX = EFCFh
  5661.     BX = CB00h (magic value)
  5662. Return: ES:BX -> CUBITR.EXE handler for INT 21
  5663.     CX = status
  5664.         2020h successful
  5665.         2222h failed
  5666. Note:    if DX is neither 0000h nor CFBFh on entry, some other code is executed
  5667. SeeAlso: AX=69FFh/DX=0000h
  5668. --------D-216A-------------------------------
  5669. INT 21 U - DOS 4.0+ - COMMIT FILE
  5670.     AH = 6Ah
  5671.     BX = file handle
  5672. Return: CF clear if successful
  5673.         AH = 68h
  5674.     CF set on error
  5675.         AX = error code (06h) (see #1020 at AH=59h/BX=0000h)
  5676. Note:    identical to AH=68h in DOS 5.0-6.0; not known whether this is the case
  5677.       in DOS 4.x
  5678. SeeAlso: AH=68h
  5679. --------D-216B-------------------------------
  5680. INT 21 U - DOS 4.0 internal - IFS IOCTL
  5681.     AH = 6Bh
  5682.     AL = subfunction
  5683.         00h ???
  5684.         DS:SI -> Current Directory Structure???
  5685.         CL = drive (1=A:)
  5686.         01h ???
  5687.         DS:SI -> ???
  5688.         CL = file handle???
  5689.         02h ???
  5690.         DS:SI -> Current Directory Structure???
  5691.         DI = ???
  5692.         CX = drive (1=A:)
  5693. Return: CF set on error
  5694.         AX = error code (see #1020 at INT 21/AH=59h/BX=0000h)
  5695.     CF clear if successful
  5696. Note:    passed through to INT 2F/AX=112Fh with AX on top of stack
  5697. SeeAlso: AH=6Bh"DOS 5",INT 2F/AX=112Fh
  5698. --------D-216B-------------------------------
  5699. INT 21 U - DOS 5+ - NULL FUNCTION
  5700.     AH = 6Bh
  5701. Return: AL = 00h
  5702. Note:    this function does nothing and returns immediately
  5703. SeeAlso: AH=6Bh"DOS 4"
  5704. --------D-216C00-----------------------------
  5705. INT 21 - DOS 4.0+ - EXTENDED OPEN/CREATE
  5706.     AX = 6C00h
  5707.     BL = open mode as in AL for normal open (see also AH=3Dh)
  5708.         bit 7: inheritance
  5709.         bits 4-6: sharing mode
  5710.         bit 3 reserved
  5711.         bits 0-2: access mode
  5712.         100 read-only, do not modify file's last-access time (DOS 7.0)
  5713.     BH = flags
  5714.         bit 6 = auto commit on every write (see also AH=68h)
  5715.         bit 5 = return error rather than doing INT 24h
  5716.         bit 4 = (FAT32) extended size (>= 2GB)
  5717.     CX = create attribute (see #1111)
  5718.     DL = action if file exists/does not exist (see #1112)
  5719.     DH = 00h (reserved)
  5720.     DS:SI -> ASCIZ file name
  5721. Return: CF set on error
  5722.        AX = error code (see #1020 at AH=59h/BX=0000h)
  5723.     CF clear if successful
  5724.        AX = file handle
  5725.        CX = status (see #1110)
  5726. Notes:    the PC LAN Program only supports existence actions (in DL) of 01h,
  5727.       10h with sharing=compatibility, and 12h
  5728.     DR DOS reportedly does not support this function and does not return
  5729.       an "invalid function call" error when this function is used.
  5730.     the documented bits of BX are stored in the SFT when the file is opened
  5731.       (see #0982,#0983)
  5732. BUG:    this function has bugs (at least in DOS 5.0 and 6.2) when used with
  5733.       drives handled via the network redirector (INT 2F/AX=112Eh):
  5734.         - CX (attribute) is not passed to the redirector if DL=11h,
  5735.         - CX does not return the status, it is returned unchanged because
  5736.           DOS does a PUSH CX/POP CX when calling the redirector.
  5737. SeeAlso: AH=3Ch,AH=3Dh,AX=6C01h,AH=71h,INT 2F/AX=112Eh
  5738.  
  5739. (Table 1110)
  5740. Values for extended open function status:
  5741.  01h    file opened
  5742.  02h    file created
  5743.  03h    file replaced
  5744.  
  5745. Bitfields for file create attribute:
  5746. Bit(s)    Description    (Table 1111)
  5747.  6-15    reserved
  5748.  5    archive
  5749.  4    reserved
  5750.  3    volume label
  5751.  2    system
  5752.  1    hidden
  5753.  0    readonly
  5754.  
  5755. Bitfields for action:
  5756. Bit(s)    Description    (Table 1112)
  5757.  7-4    action if file does not exist
  5758.     0000 fail
  5759.     0001 create
  5760.  3-0    action if file exists
  5761.     0000 fail
  5762.     0001 open
  5763.     0010 replace/open
  5764. --------O-216C01-----------------------------
  5765. INT 21 U - OS/2 v2.0 - "DosOpen2"
  5766.     AX = 6C01h
  5767.     BL = open mode as in AL for normal open (see also AH=3Dh)
  5768.         bit 7: inheritance
  5769.         bits 4-6: sharing mode
  5770.         bit 3 reserved
  5771.         bits 0-2: access mode
  5772.     BH = flags
  5773.         bit 6 = auto commit on every write (see also AH=68h)
  5774.         bit 5 = return error rather than doing INT 24h
  5775.     CX = create attribute (see #1111)
  5776.     DL = action if file exists/does not exist (see #1112)
  5777.     DH = 00h (reserved)
  5778.     DS:SI -> ASCIZ file name
  5779.     ES:DI -> EAOP structure
  5780. Return: CF set on error
  5781.        AX = error code (see #1020 at AH=59h/BX=0000h)
  5782.     CF clear if successful
  5783.        AX = file handle
  5784.        CX = status (see #1110)
  5785. Note:    this function is virtually identical to AX=6C00h, but supports OS/2's
  5786.       extended attributes
  5787. SeeAlso: AX=5704h,AX=6C00h,AH=6Fh"OS/2"
  5788. --------D-216D-------------------------------
  5789. INT 21 U - DOS 5+ ROM - FIND FIRST ROM PROGRAM
  5790.     AH = 6Dh
  5791.     DS:DX -> ASCIZ program name (may contain wildcrds)
  5792. Return: CF clear if found
  5793.         Disk Transfer Area filled with ROM search structure (see #1113)
  5794.     CF set if not found
  5795.         AX = error code
  5796.         0002h name not found in ROM
  5797.         0003h name contains colon or backslash
  5798.     ---if not supported (DOS <5, MS-DOS 5+ non-ROM versions)---
  5799.     AL = 00h
  5800. Notes:    the '*' wildcard matches all remaining characters in a ROM program's
  5801.       name; any following characters in the search mask are ignored up to
  5802.       another asterisk, which must be matched by an asterisk in the
  5803.       found program's name.
  5804.     the search mask and program names may contain multiple periods
  5805. SeeAlso: AH=1Ah,AH=4Eh,AH=6Eh,AX=6F00h,AX=6F02h
  5806.  
  5807. Format of ROM search structure:
  5808. Offset    Size    Description    (Table 1113)
  5809.  00h 13 BYTEs    ASCIZ name of found ROM program
  5810.  0Dh    DWORD    address at which to resume search (do not modify)
  5811.  11h    var    ASCIZ search mask passed in (do not modify)
  5812. --------O-216D-------------------------------
  5813. INT 21 U - OS/2 v1.x FAPI - "DosMkDir2"
  5814.     AH = 6Dh
  5815.     ???
  5816. Return: ???
  5817. Desc:    create a new directory, with extended attribute information
  5818. Note:    also supported by OS/2 v2.0+ Virtual DOS Machines
  5819. BUG:    does not work under OS/2 v2.0 because MVDM does not translate the
  5820.       real-mode segment pointer in the Extended Attribute structure
  5821.       (see #1013) into a protected-mode selector; use AH=39h followed by
  5822.       AX=5703h instead
  5823. SeeAlso: AH=39h,AX=5702h"OS/2",AX=5703h"OS/2"
  5824. --------O-216D-------------------------------
  5825. INT 21 U - Novell DOS 7 - NOP
  5826.     AH = 6Dh
  5827. Return: AX = 0000h
  5828. Note:    this function invokes the same code as other NOP functions such as
  5829.       AH=18h and AH=61h
  5830. --------D-216E-------------------------------
  5831. INT 21 U - DOS 5+ ROM - FIND NEXT ROM PROGRAM
  5832.     AH = 6Eh
  5833.     Disk Transfer Area contains result of previous FindFirst ROM
  5834.       (see AH=6Dh)
  5835. Return: CF clear if found
  5836.         Disk Transfer Area filled with updated ROM search structure
  5837.           (see #1113)
  5838.     CF set if not found
  5839.         AX = 0012h (no more matches)
  5840.     ---if not supported (DOS <5, MS-DOS 5+ non-ROM versions)---
  5841.     AL = 00h
  5842. SeeAlso: AH=4Fh,AH=6Dh
  5843. --------O-216E-------------------------------
  5844. INT 21 U - OS/2 v1.x FAPI - "DosEnumAttrib"
  5845.     AH = 6Eh
  5846.     DS:SI -> parameter packet (see #1114)
  5847. Return: CF clear if successful
  5848.         AX = 0000h
  5849.         DS:SI buffer updated
  5850.     CF set on error
  5851.         AX = error code
  5852. Note:    also supported by OS/2 v2.0+ Virtual DOS Machines
  5853. SeeAlso: AX=5703h,AH=6Fh"OS/2",INT 2F/AX=112Dh
  5854.  
  5855. Format of OS/2 DosEnumAttrib parameter packet:
  5856. Offset    Size    Description    (Table 1114)
  5857.  00h    DWORD    reserved (0)
  5858.  04h    DWORD    info level (always 00000001h)
  5859.  08h    DWORD    (call) number of entries requested
  5860.         (ret) actual number of entries returned
  5861.  0Ch    DWORD    length of buffer
  5862.  10h    DWORD    pointer to buffer for results
  5863.  14h    DWORD    number of first entry to return
  5864.  18h    DWORD    -> file handle or ASCIZ pathname
  5865.  1Ch    WORD    flag: 00h = previous field is file handle, 01h = pathname
  5866. --------D-216F00-----------------------------
  5867. INT 21 U - DOS 5+ ROM - GET ROM SCAN START ADDRESS
  5868.     AX = 6F00h
  5869. Return: CF clear
  5870.     AL = 00h
  5871.         BX = current ROM scan starting segment if function supported
  5872. SeeAlso: AH=6Dh,AX=6F01h,AX=6F02h
  5873. --------O-216F00-----------------------------
  5874. INT 21 U - OS/2 v1.x FAPI - "DosQMaxEASize" - GET MAXIMUM SIZE OF EXTENDED ATTR
  5875.     AX = 6F00h
  5876.     DS:SI -> DWORD buffer for maximum size of an extended attribute
  5877. Return: CF clear if successful
  5878.         AX = 0000h
  5879.         buffer filled
  5880.     CF set on error
  5881.         AX = error code
  5882. Note:    also supported by OS/2 v2.0+ Virtual DOS Machines
  5883. SeeAlso: AX=5703h,AX=6C01h,AH=6Eh"OS/2"
  5884. --------D-216F01-----------------------------
  5885. INT 21 U - DOS 5+ ROM - SET ROM SCAN START ADDRESS
  5886.     AX = 6F01h
  5887.     BX = new ROM scan starting address
  5888. Return: CF clear
  5889.     AL = 00h
  5890. SeeAlso: AX=6F00h,AX=6F03h
  5891. --------D-216F02-----------------------------
  5892. INT 21 U - DOS 5+ ROM - GET EXCLUSION REGION LIST
  5893.     AX = 6F02h
  5894.     ES:BX -> buffer for exclusion region list (see #1115)
  5895. Return: CF clear
  5896.     AL = 00h
  5897.     ES:BX = 0000h:0000h on error, unchanged if buffer filled
  5898. Note:    for DOS versions which do not support this function, the return value
  5899.       is AL=00h, CF unchanged, ES:BX unchanged, and the ES:BX buffer
  5900.       unchanged
  5901. SeeAlso: AX=6F00h,AX=6F03h
  5902.  
  5903. Format of ROM exclusion region list:
  5904. Offset    Size    Description    (Table 1115)
  5905.  00h    WORD    number of entries
  5906.  02h 2N WORDs    start/end segments of N excluded regions
  5907. --------D-216F03-----------------------------
  5908. INT 21 U - DOS 5+ ROM - SET EXCLUSION REGION LIST
  5909.     AX = 6F03h
  5910.     DS:DX -> new exclusion region list (see #1115)
  5911. Return: CF clear
  5912.     AL = 00h
  5913. Notes:    DOS saves only the pointer and assumes that the contents of the list
  5914.       are never changed, and that regions do not overlap
  5915.     if AL > 03h on entry, DOS returns CF set/AL=01h
  5916. SeeAlso: AX=6F01h,AX=6F02h
  5917. --------D-2170-------------------------------
  5918. INT 21 - MS-DOS 7 (Windows95) - GET/SET INTERNATIONALIZATION INFORMATION
  5919.     AH = 70h
  5920.     AL = subfunction
  5921.         00h get ??? info
  5922.         CX = buffer size (3Ah bytes needed)
  5923.         ES:DI -> buffer
  5924.         01h set above info
  5925.         CX = number of bytes to set
  5926.         DS:SI -> buffer containing ??? info (see #3319)
  5927.         02h set general internationalization info
  5928.         DS:SI -> buffer containing info (see #3320)
  5929.         CX = buffer size in bytes (up to 26h bytes used)
  5930.         first three bytes are skipped, the rest is copied to somewhere
  5931.           in the DOS data segment
  5932. Return: CF clear if successful
  5933.         ES:DI buffer filled (func 00h) (see #3319)
  5934.         CX = number of bytes actually set or returned
  5935.           (max 003Ah for functions 00h and 01h under v7.00, 0026h for
  5936.           function 02h)
  5937.     CF set on error
  5938.         AX = error code
  5939.         7000h if function not supported
  5940. SeeAlso: AH=38h,AH=65h
  5941.  
  5942. Format of MS-DOS v7.0 ??? table:
  5943. Offset    Size    Description    (Table 3319)
  5944.  00h 58 BYTEs    ??? country-specific information
  5945.         returned was (among others) "ENU USA GR"..."AM PM M/d/yy"...
  5946.          "dddd,MMMMdd,yyyy" in the German Preview version, and "US"
  5947.          instead of "GR" in the US build 450 version (with German
  5948.          country setting) and the US build 950a version with US
  5949.          country settings
  5950. SeeAlso: #3320
  5951.  
  5952. Format of MS-DOS v7.0 internationalization table:
  5953. Offset    Size    Description    (Table 3320)
  5954.  00h  3 BYTEs    unused (and ignored by DOS)
  5955.  03h    WORD    country ID (see #0747 at AH=38h)
  5956.  05h    WORD    code page (see #1099)
  5957.  07h    WORD    date format
  5958.  09h  5 BYTEs    ASCIZ current symbol string
  5959.  07h  2 BYTEs    ASCIZ thousands separator
  5960.  09h  2 BYTEs    ASCIZ decimal separator
  5961.  0Bh  2 BYTEs    ASCIZ date separator
  5962.  0Dh  2 BYTEs    ASCIZ time separator
  5963.  0Fh    BYTE    currency format
  5964.         bit 2 = set if currency symbol replaces decimal point
  5965.         bit 1 = number of spaces between value and currency symbol
  5966.         bit 0 = 0 if currency symbol precedes value
  5967.             1 if currency symbol follows value
  5968.  10h    BYTE    number of digits after decimal in currency
  5969.  11h    BYTE    time format
  5970.         bit 0 = 0 if 12-hour clock
  5971.             1 if 24-hour clock
  5972.  12h    DWORD    address of case map routine
  5973.         (FAR CALL, AL = character to map to upper case [>= 80h])
  5974.  16h  2 BYTEs    ASCIZ data-list separator
  5975.  18h 10 BYTEs    reserved
  5976. Note:    this table has the identical format to the extended country information
  5977.       retrieved via AH=65h with info ID = 01h
  5978. SeeAlso: #0746,#1093
  5979. ----------217070BX6060-----------------------
  5980. INT 21 - PCW Weather Card interface - GET DATA SEGMENT
  5981.     AX = 7070h
  5982.     BX = 6060h
  5983.     CX = 7070h
  5984.     DX = 7070h
  5985.     SI = 7070h
  5986.     DI = 7070h
  5987. Return: AX = segment of data structure (see #1116)
  5988. Notes:    the data structure is at offset 516 from this segment
  5989.     the update byte is at offset 514 from this segment.  Updates are
  5990.       once per second while this byte is nonzero and it is decremented
  5991.       once per second.  While this byte is 0 updates are once per minute.
  5992. SeeAlso: AX=7070h/BX=7070h
  5993.  
  5994. Format of PCW Weather Card data structure:
  5995. Offset    Type    Description    (Table 1116)
  5996.  00h    WORD    hour
  5997.  02h    WORD    minute
  5998.  04h    WORD    second
  5999.  06h    WORD    day
  6000.  08h    WORD    month
  6001.  0Ah    WORD    year
  6002.  0Ch    WORD    ???
  6003.  0Eh    WORD    relative barometric pressure (in 1/100 inches)
  6004.  10h    WORD    ???
  6005.  12h    WORD    ???
  6006.  14h    WORD    temperature 1 (in 1/10 degrees F)
  6007.  16h    WORD    temperature 1 lowest (in 1/10 degrees F)
  6008.  18h    WORD    temperature 1 highest (in 1/10 degrees F)
  6009.  1Ah    WORD    temperature 2 (in 1/10 degrees F)
  6010.  1Ch    WORD    temperature 2 lowest (in 1/10 degrees F)
  6011.  1Eh    WORD    temperature 2 highest (in 1/10 degrees F)
  6012.  20h    WORD    wind speed (in MPH)
  6013.  22h    WORD    average of 60 wind speed samples (in MPH)
  6014.  24h    WORD    highest wind speed (in MPH)
  6015.  26h    WORD    wind chill factor  (in 1/10 degrees F)
  6016.  28h    WORD    lowest wind chill factor (in 1/10 degrees F)
  6017.  2Ah    WORD    ???
  6018.  2Ch    WORD    wind direction (in degrees)
  6019.  2Eh    WORD    accumulated daily rainfall (in 1/10 inches)
  6020.  30h    WORD    accumulated annual rainfall (in 1/10 inches)
  6021. ----------217070BX7070-----------------------
  6022. INT 21 - PCW Weather Card interface - INSTALLATION CHECK
  6023.     AX = 7070h
  6024.     BX = 7070h
  6025.     CX = 7070h
  6026.     DX = 7070h
  6027.     SI = 7070h
  6028.     DI = 7070h
  6029. Return: AX = 0070h
  6030.     BX = 0070h
  6031.     CX = 0070h
  6032.     DX = 0070h
  6033.     SI = 0070h
  6034.     DI = 0070h
  6035. SeeAlso: AX=7070h/BX=6060h,AX=8080h
  6036. --------D-2171-------------------------------
  6037. INT 21 - MS-DOS 7 (Chicago) - LONG FILENAME FUNCTIONS
  6038.     AH = 71h
  6039.     AL = function
  6040.         0Dh reset drive
  6041.         39h create directory
  6042.         3Ah remove directory
  6043.         3Bh set current directory
  6044.         41h delete file
  6045.         43h get file attributes (BL=00h), set file attributes (BL=01h)
  6046.         47h get current directory
  6047.         4Eh find first file
  6048.         4Fh find next file
  6049.         56h move (rename) file
  6050.         6Ch create/open file
  6051. Return: CF set on error
  6052.         AX = error code (see #1020)
  6053.         7100h if function not supported
  6054.     CF clear if successful
  6055.         other registers as for corresponding "old" DOS function
  6056. Notes:    if error 7100h is returned, the old-style function should be called
  6057.     AX=714Eh returns a "search handle" which must be passed to AX=714Fh;
  6058.       when the search is complete, AX=71A1h must be called to terminate
  6059.       the search
  6060.     for compatibility with DOS versions prior to v7.00, the carry flag
  6061.       should be set on call to ensure that it is set on exit
  6062. SeeAlso: AH=39h,AH=3Ah,AH=3Bh,AH=41h,AX=4300h,AX=4301h,AX=4304h,AX=4306h
  6063. SeeAlso: AX=4307h,AH=47h,AH=4Eh,AH=4Fh,AH=56h,AH=6Ch,AX=714Eh,AX=714Fh
  6064. SeeAlso: AX=71A0h,AX=71A1h
  6065. --------D-21710D-----------------------------
  6066. INT 21 - Windows95 - RESET DRIVE
  6067.     AX = 710Dh
  6068.     CX = action (see #1117)
  6069.     DX = drive number
  6070. Return: CF clear
  6071. Note:    for compatibility with DOS versions prior to v7.00, the carry flag
  6072.       should be set on call to ensure that it is set on exit
  6073. SeeAlso: AH=0Dh
  6074.  
  6075. (Table 1117)
  6076. Values for drive reset action:
  6077.  0000h    flush filesystem buffers for drive, and reset drive
  6078.  0001h    flush filesystem buffers and cache for drive, and reset drive
  6079.  0002h    remount DriveSpace volume
  6080. --------D-217139-----------------------------
  6081. INT 21 - Windows95 - LONG FILENAME - MAKE DIRECTORY
  6082.     AX = 7139h
  6083.     DS:DX -> ASCIZ long directory name (including path)
  6084. Return: CF clear if successful
  6085.     CF set on error
  6086.         AX = error code (see #1020)
  6087.         7100h if function not supported
  6088. Note:    for compatibility with DOS versions prior to v7.00, the carry flag
  6089.       should be set on call to ensure that it is set on exit
  6090. SeeAlso: AH=39h,AX=713Ah,AX=713Bh
  6091. --------D-21713A-----------------------------
  6092. INT 21 - Windows95 - LONG FILENAME - REMOVE DIRECTORY
  6093.     AX = 713Ah
  6094.     DS:DX -> ASCIZ long name of directory to remove
  6095. Return: CF clear if successful
  6096.     CF set on error
  6097.         AX = error code (see #1020)
  6098.         7100h if function not supported
  6099. Note:    for compatibility with DOS versions prior to v7.00, the carry flag
  6100.       should be set on call to ensure that it is set on exit
  6101. SeeAlso: AH=3Ah,AX=7139h
  6102. --------D-21713B-----------------------------
  6103. INT 21 - Windows95 - LONG FILENAME - CHANGE DIRECTORY
  6104.     AX = 713Bh
  6105.     DS:DX -> ASCIZ long name of directory to make current
  6106. Return: CF clear if successful
  6107.     CF set on error
  6108.         AX = error code (see #1020)
  6109.         7100h if function not supported
  6110. Note:    for compatibility with DOS versions prior to v7.00, the carry flag
  6111.       should be set on call to ensure that it is set on exit
  6112. SeeAlso: AH=0Eh,AH=3Bh,AX=7139h
  6113. --------D-217141-----------------------------
  6114. INT 21 - Windows95 - LONG FILENAME - DELETE FILE
  6115.     AX = 7141h
  6116.     DS:DX -> ASCIZ long name of file to delete
  6117.     SI = wildcard and attributes flag
  6118.         0000h wildcards are not allowed, and search attributes are
  6119.             ignored
  6120.         0001h wildcards are allowed, and only files with matching
  6121.             names and attributes are deleted
  6122.     CL = search attributes
  6123.     CH = must-match attributes
  6124. Return: CF clear if successful
  6125.     CF set on error
  6126.         AX = error code (see #1020)
  6127.         7100h if function not supported
  6128. Note:    for compatibility with DOS versions prior to v7.00, the carry flag
  6129.       should be set on call to ensure that it is set on exit
  6130. SeeAlso: AH=41h
  6131. --------D-217143-----------------------------
  6132. INT 21 - Windows95 - LONG FILENAME - EXTENDED GET/SET FILE ATTRIBUTES
  6133.     AX = 7143h
  6134.     DS:DX -> ASCIZ filename
  6135.     BL = action
  6136.         00h retrieve attributes
  6137.         Return:    CX = file attributes (see #0765)
  6138.         01h set attributes
  6139.         CX = attributes
  6140.         02h get physical size of compressed file
  6141.         Return: DX:AX = actual disk usage of file, in bytes
  6142.         03h set last write date/time
  6143.         DI = new last-write date (see #1006)
  6144.         CX = new last-write time (see #1005)
  6145.         04h get last write date/time
  6146.         Return:    CX = last write time (see #1005)
  6147.             DI = last write date (see #1006)
  6148.         05h set last access date
  6149.         DI = new last-access date (see #1006)
  6150.         06h get last access date
  6151.         Return:    DI = last access date (see #1006)
  6152.         07h set creation date/time
  6153.         DI = new creation date (see #1006)
  6154.         CX = new creation time (see #1005)
  6155.         SI = hundredths (10-millisecond units past time in CX, 0-199)
  6156.         08h get creation date/time
  6157.         Return:    CX = creation time (see #1005)
  6158.             DI = creation date (see #1006)
  6159.             SI = hundredths (10-millisecond units past time in CX)
  6160. Return: CF clear if successful
  6161.     CF set on error
  6162.         AX = error code (see #1020)
  6163.         7100h if function not supported
  6164. Note:    for compatibility with DOS versions prior to v7.00, the carry flag
  6165.       should be set on call to ensure that it is set on exit
  6166. SeeAlso: AX=4300h,AX=4301h
  6167. --------D-217147-----------------------------
  6168. INT 21 - Windows95 - LONG FILENAME - GET CURRENT DIRECTORY
  6169.     AX = 7147h
  6170.     DL = drive number (00h = current, 01h = A:, etc.)
  6171.     DS:SI -> buffer for ASCIZ directory name
  6172. Return: CF clear if successful
  6173.     CF set on error
  6174.         AX = error code (see #1020)
  6175.         7100h if function not supported
  6176. Notes:    the returned pathname does not include the drive letter, colon, or
  6177.       leading backslash
  6178.     the provided buffer must be at least as large as the value indicated
  6179.       by AX=71A0h
  6180.     for compatibility with DOS versions prior to v7.00, the carry flag
  6181.       should be set on call to ensure that it is set on exit
  6182. SeeAlso: AH=47h,AX=713Bh,AX=71A0h
  6183. --------D-21714E-----------------------------
  6184. INT 21 - Windows95 - LONG FILENAME - FIND FIRST MATCHING FILE
  6185.     AX = 714Eh
  6186.     CL = allowable-attributes mask (see #0765 at AX=4301h)
  6187.           (bits 0 and 5 ignored)
  6188.     CH = required-attributes mask (see #0765)
  6189.     SI = date/time format (see #1118)
  6190.     DS:DX -> ASCIZ filespec (both "*" and "*.*" match any filename)
  6191.     ES:DI -> FindData record (see #1119)
  6192. Return: CF clear if successful
  6193.         AX = filefind handle (needed to continue search)
  6194.         CX = Unicode conversion flags (see #1120)
  6195.     CF set on error
  6196.         AX = error code
  6197.         7100h if function not supported
  6198. Notes:    this function is only available when IFSMgr is running, not under bare
  6199.       MS-DOS 7
  6200.     the application should close the filefind handle with AX=71A1h as soon
  6201.       as it has completed its search
  6202.     for compatibility with DOS versions prior to v7.00, the carry flag
  6203.       should be set on call to ensure that it is set on exit
  6204. SeeAlso: AH=4Eh,AX=714Fh,AX=71A1h
  6205.  
  6206. (Table 1118)
  6207. Values for Windows95 date/time format:
  6208.  0000h    use 64-bit file time format
  6209.  0001h    use MS-DOS date/time values (see #1005,#1006) in low double-word of
  6210.       file time QWORD (date is high word, time is low word of double-word)
  6211.  
  6212. Format of Windows95 long filename FindData record:
  6213. Offset    Size    Description    (Table 1119)
  6214.  00h    DWORD    file attributes
  6215.         bits 0-6 standard DOS attributes (see #0765 at INT 21/AX=4301h)
  6216.         bit 8: temporary file
  6217.  04h    QWORD    file creation time (number of 100ns intervals since 1/1/1601)
  6218.  0Ch    QWORD    last access time
  6219.  14h    QWORD    last modification time
  6220.  1Ch    DWORD    file size (high 32 bits)
  6221.  20h    DWORD    file size (low 32 bits)
  6222.  24h  8 BYTEs    reserved
  6223.  2Ch 260 BYTEs    ASCIZ full filename
  6224. 130h 14 BYTEs    ASCIZ short filename (for backward compatibility)
  6225.  
  6226. Bitfields for Windows95 Unicode conversion flags:
  6227. Bit(s)    Description    (Table 1120)
  6228.  0    the returned full filename contains underscores for un-convertable
  6229.       Unicode characters
  6230.  1    the returned short filename contains underscores for un-convertable
  6231.       Unicode characters
  6232. --------D-21714F-----------------------------
  6233. INT 21 - Windows95 - LONG FILENAME - FIND NEXT MATCHING FILE
  6234.     AX = 714Fh
  6235.     BX = filefind handle (from AX=714Eh)
  6236.     SI = date/time format (see #1118)
  6237.     ES:DI -> buffer for FindData record (see #1119)
  6238. Return: CF clear if successful
  6239.         CX = Unicode conversion flags (see #1120)
  6240.     CF set on error
  6241.         AX = error code
  6242.         7100h if function not supported
  6243. Notes:    this function is only available when IFSMgr is running, not under bare
  6244.       MS-DOS 7
  6245.     for compatibility with DOS versions prior to v7.00, the carry flag
  6246.       should be set on call to ensure that it is set on exit
  6247. SeeAlso: AH=4Eh,AX=714Eh,AX=71A1h
  6248. --------D-217156-----------------------------
  6249. INT 21 - Windows95 - LONG FILENAME - RENAME FILE
  6250.     AX = 7156h
  6251.     DS:DX -> ASCIZ old file or directory name (long names allowed)
  6252.     ES:DI -> ASCIZ new name (long names allowed)
  6253. Return: CF clear if successful
  6254.     CF set on error
  6255.         AX = error code
  6256.         7100h if function not supported
  6257. Note:    the file may be renamed into a different directory, but not across
  6258.       disks
  6259. SeeAlso: AH=56h,AX=7141h
  6260. --------D-217160CL00-------------------------
  6261. INT 21 - Windows95 - LONG FILENAME - "TRUENAME" - CANONICALIZE PATH
  6262.     AX = 7160h
  6263.     CL = 00h
  6264.     CH = SUBST expansion flag
  6265.         00h return a path containing true path for a SUBSTed drive letter
  6266.         80h return a path containing the SUBSTed drive letter
  6267.     DS:SI -> ASCIZ filename or path (either long name or short name)
  6268.     ES:DI -> 261-byte buffer for canonicalized name
  6269. Return: CF set on error
  6270.         AX = error code
  6271.         02h invalid component in directory path or drive letter only
  6272.         03h malformed path or invalid drive letter
  6273.         ES:DI buffer unchanged
  6274.     CF clear if successful
  6275.         ES:DI buffer filled with fully qualified name
  6276.         AX destroyed
  6277. Desc:    determine the canonical name of the specified filename or path,
  6278.       corresponding to the undocumented TRUENAME command in COMMAND.COM
  6279. Notes:    if a complete path is given, the result will be a short-form complete
  6280.       path; otherwise, the given relative path is appended to the
  6281.       short-form current directory name, '.'/'..'/'...'/etc. are resolved,
  6282.       and the final result uppercased without converting any remaining
  6283.       long-form names to short-form
  6284.     for compatibility with DOS versions prior to v7.00, the carry flag
  6285.       should be set on call to ensure that it is set on exit
  6286. SeeAlso: AH=60h,AX=7160h/CL=01h
  6287. --------D-217160CL01-------------------------
  6288. INT 21 - Windows95 - LONG FILENAME - GET SHORT (8.3) FILENAME FOR FILE
  6289.     AX = 7160h
  6290.     CL = 01h
  6291.     CH = SUBST expansion flag
  6292.         00h return a path containing true path for a SUBSTed drive letter
  6293.         80h return a path containing the SUBSTed drive letter
  6294.     DS:SI -> ASCIZ long filename or path
  6295.     ES:DI -> 67-byte buffer for short filename
  6296. Return: CF set on error
  6297.         AX = error code
  6298.         02h invalid component in directory path or drive letter only
  6299.         03h malformed path or invalid drive letter
  6300.         ES:DI buffer unchanged
  6301.     CF clear if successful
  6302.         ES:DI buffer filled with equivalent short filename (full path,
  6303.           even if relative path given, and all uppercase)
  6304. Note:    this call returns the short name for any long-filename portions of
  6305.       the provided pathname or filename
  6306. SeeAlso: AH=60h,AX=7160h/CL=00h,AX=7160h/CL=02h
  6307. --------D-217160CL02-------------------------
  6308. INT 21 - Windows95 - LONG FILENAME - GET CANONICAL LONG FILENAME OR PATH
  6309.     AX = 7160h
  6310.     CL = 02h
  6311.     CH = SUBST expansion flag
  6312.         00h return a path containing true path for a SUBSTed drive letter
  6313.         80h return a path containing the SUBSTed drive letter
  6314.     DS:SI -> ASCIZ short filename or path
  6315.     ES:DI -> 261-byte buffer for canonicalized long name
  6316. Return: CF set on error
  6317.         AX = error code
  6318.         02h invalid component in directory path or drive letter only
  6319.         03h malformed path or invalid drive letter
  6320.         ES:DI buffer unchanged
  6321.     CF clear if successful
  6322.         ES:DI buffer filled with qualified long name (can contain
  6323.           lowercase letters)
  6324. Desc:    determine the canonical name of the specified filename or path,
  6325.       corresponding to the undocumented TRUENAME command in COMMAND.COM
  6326. Note:    this call returns the short name for any long-filename portions of
  6327.       the provided pathname or filename
  6328. BUG:    even though the maximum length of a complete long pathname is 260
  6329.       characters, Windows95 returns CF set/AX=0003h even if the file
  6330.       exists whenever the full pathname is more than 255 characters
  6331. SeeAlso: AH=60h,AX=7160h/CL=00h,AX=7160h/CL=01h
  6332. --------D-21716C-----------------------------
  6333. INT 21 - Windows95 - LONG FILENAME - CREATE OR OPEN FILE
  6334.     AX = 716Ch
  6335.     BX = access mode and sharing flags (see #1122,also AX=6C00h)
  6336.     CX = attributes
  6337.     DX = action (see #1121)
  6338.     DS:SI -> ASCIZ filename
  6339.     DI = alias hint (number to append to short filename for disambiguation)
  6340. Return: CF clear if successful
  6341.         AX = file handle
  6342.         CX = action taken
  6343.         0001h file opened
  6344.         0002h file created
  6345.         0003h file replaced
  6346.     CF set on error
  6347.         AX = error code (see #1020)
  6348.         7100h if function not supported
  6349. SeeAlso: AX=6C00h,AX=7141h,AX=7156h,AX=71A9h
  6350.  
  6351. Bitfields for Windows95 long-name open action:
  6352. Bit(s)    Description    (Table 1121)
  6353.  0    open file (fail if file does not exist)
  6354.  1    truncate file if it already exists (fail if file does not exist)
  6355.  4    create new file if file does not already exist (fail if exists)
  6356. Note:    the only valid combinations of multiple flags are bits 4&0 and 4&1
  6357.  
  6358. Bitfields for Windows95 file access/sharing modes:
  6359. Bit(s)    Description    (Table 1122)
  6360.  2-0    file access mode
  6361.     000 read-only
  6362.     001 write-only
  6363.     010 read-write
  6364.     100 read-only, do not modify file's last-access time
  6365.  6-4    file sharing modes
  6366.  7    no-inherit flag
  6367.  8    do not buffer data (requires that all reads/writes be exact physical
  6368.       sectors)
  6369.  9    do not compress file even if volume normally compresses files
  6370.  10    use alias hint in DI as numeric tail for short-name alias
  6371.  12-11    unused??? (0)
  6372.  13    return error code instead of generating INT 24h if critical error
  6373.       while opening file
  6374.  14    commit file after every write operation
  6375. SeeAlso: #0749
  6376. --------D-2171A0-----------------------------
  6377. INT 21 - Windows95 - LONG FILENAME - GET VOLUME INFORMATION
  6378.     AX = 71A0h
  6379.     DS:DX -> ASCIZ root name (e.g. "C:\")
  6380.     ES:DI -> buffer for file system name
  6381.     CX = size of ES:DI buffer
  6382. Return: CF clear if successful
  6383.         BX = file system flags (see #1123)
  6384.         CX = maximum length of file name [usually 255]
  6385.         DX = maximum length of path [usually 260]
  6386.         ES:DI buffer filled (ASCIZ, e.g. "FAT","NTFS","CDFS")
  6387.     CF set on error
  6388.         AX = error code
  6389.         7100h if function not supported
  6390. Notes:    for the file system name buffer, 32 bytes should be sufficient; that's
  6391.      what is used in some sample code by Walter Oney from Microsoft.
  6392.     this function accesses the disk the first time it is called
  6393. SeeAlso: AX=714Eh,AX=7160h/CL=00h
  6394.  
  6395. Bitfields for long filename volume information flags:
  6396. Bit(s)    Description    (Table 1123)
  6397.  0    searches are case sensitive
  6398.  1    preserves case in directory entries
  6399.  2    uses Unicode characters in file and directory names
  6400.  3-13    reserved (0)
  6401.  14    supports DOS long filename functions
  6402.  15    volume is compressed
  6403. --------D-2171A1-----------------------------
  6404. INT 21 - Windows95 - LONG FILENAME - "FindClose" - TERMINATE DIRECTORY SEARCH
  6405.     AX = 71A1h
  6406.     BX = filefind handle (from AX=714Eh)
  6407. Return: CF clear if successful
  6408.     CF set on error
  6409.        AX = error code
  6410.         7100h if function not supported
  6411. Notes:    this function must be called after starting a search with AX=714Eh,
  6412.       to indicate that the search handle returned by that function will
  6413.       no longer be used
  6414.     this function is only available when IFSMgr is running, not under bare
  6415.       MS-DOS 7
  6416. SeeAlso: AH=4Eh,AX=714Eh,AX=714Fh
  6417. --------D-2171A2-----------------------------
  6418. INT 21 U - Windows95 - internal
  6419.     AX = 71A2h
  6420.     ???
  6421. Return: ???
  6422. Note:    documented as "for internal use by Windows 95 only"
  6423. --------D-2171A3-----------------------------
  6424. INT 21 U - Windows95 - internal
  6425.     AX = 71A3h
  6426.     ???
  6427. Return: ???
  6428. Note:    documented as "for internal use by Windows 95 only"
  6429. --------D-2171A4-----------------------------
  6430. INT 21 U - Windows95 - internal
  6431.     AX = 71A4h
  6432.     ???
  6433. Return: ???
  6434. Note:    documented as "for internal use by Windows 95 only"
  6435. --------D-2171A5-----------------------------
  6436. INT 21 U - Windows95 - internal
  6437.     AX = 71A5h
  6438.     ???
  6439. Return: ???
  6440. Note:    documented as "for internal use by Windows 95 only"
  6441. --------D-2171A6-----------------------------
  6442. INT 21 - Windows95 - LONG FILENAME - GET FILE INFO BY HANDLE
  6443.     AX = 71A6h
  6444.     BX = file handle
  6445.     DS:DX -> buffer for file information (see #1124)
  6446.     CF set
  6447. Return: CF clear if successful
  6448.         file information record filled
  6449.     CF set on error
  6450.         AX = error code
  6451.         7100h if function not supported
  6452. SeeAlso: AX=71A7h/BL=00h
  6453.  
  6454. Format of Windows95 file information:
  6455. Offset    Size    Description    (Table 1124)
  6456.  00h    DWORD    file attributes
  6457.  04h    QWORD    creation time (0 = unsupported)
  6458.  0Ch    QWORD    last access time (0 = unsupported)
  6459.  14h    QWORD    last write time
  6460.  1Ch    DWORD    volume serial number
  6461.  20h    DWORD    high 32 bits of file size
  6462.  24h    DWORD    low 32 bits of file size
  6463.  28h    DWORD    number of links to file
  6464.  2Ch    DWORD    unique file identifier (high 32 bits)
  6465.  30h    DWORD    unique file identifier (low 32 bits)
  6466. Note:    the file identifer and volume serial number together uniquely identify
  6467.       a file while it is open; the identifier may change when the system
  6468.       is restarted or the file is first opened
  6469. --------D-2171A7BL00-------------------------
  6470. INT 21 - Windows95 - LONG FILENAME - FILE TIME TO DOS TIME
  6471.     AX = 71A7h
  6472.     BL = 00h
  6473.     DS:SI -> QWORD file time
  6474. Return: CF clear if successful
  6475.         CX = DOS time (see #1005)
  6476.         DX = DOS date (see #1006)
  6477.         BH = hundredths (10-millisecond units past time in CX)
  6478.     CF set on error
  6479.         AX = error code
  6480.         7100h if function not supported
  6481. Desc:    convert Win95 64-bit file time (UTC) into DOS-style date and time
  6482.       (local timezone)
  6483. Note:    the conversion fails if the file time's value is outside the range
  6484.       1/1/1980 and 12/31/2107
  6485. SeeAlso: AX=71A6h,AX=71A7h/BL=01h
  6486. --------D-2171A7BL01-------------------------
  6487. INT 21 - Windows95 - LONG FILENAME - DOS TIME TO FILE TIME
  6488.     AX = 71A7h
  6489.     BL = 01h
  6490.     CX = DOS time (see #1005)
  6491.     DX = DOS date (see #1006)
  6492.     BH = hundredths (10-millisecond units past time in CX)
  6493.     ES:DI -> buffer for QWORD file time
  6494. Return: CF clear if successful
  6495.         ES:DI buffer filled
  6496.     CF set on error
  6497.         AX = error code
  6498.         7100h if function not supported
  6499. Desc:    convert DOS-style date and time (local timezone) into Win95 64-bit
  6500.       file time (UTC)
  6501. SeeAlso: AX=71A6h,AX=71A7h/BL=00h
  6502. --------D-2171A8-----------------------------
  6503. INT 21 - Windows95 - LONG FILENAME - GENERATE SHORT FILENAME
  6504.     AX = 71A8h
  6505.     DS:SI -> ASCIZ long filename (no path allowed!)
  6506.     ES:DI -> buffer for ASCIZ short filename
  6507.     DH = short name's format
  6508.         00h 11-char directory entry/FCB filename format
  6509.         01h DOS 8.3
  6510.     DL = character sets
  6511.         bits 7-4: short name's character set (see #1125)
  6512.         bits 3-0: long name's character set (see #1125)
  6513. Return: CF clear if successful
  6514.         ES:DI buffer filled
  6515.     CF set on error
  6516.         AX = error code
  6517.         7100h if function not supported
  6518. Note:    this function uses the same algorithm as the filesystem except that
  6519.       the returned name never has a numeric tail for disambiguation
  6520. SeeAlso: AX=7160h/CL=00h,AX=7160h/CL=02h,AX=71A7h/BL=00h
  6521.  
  6522. (Table 1125)
  6523. Values for Windows95 filename character set:
  6524.  00h    Windows ANSI
  6525.  01h    current OEM character set
  6526.  02h    Unicode
  6527. --------D-2171A9-----------------------------
  6528. INT 21 - Windows95 - LONG FILENAME - SERVER CREATE OR OPEN FILE
  6529.     AX = 71A9h
  6530.     BX = access mode and sharing flags (see #1122,also AX=6C00h)
  6531.     CX = attributes
  6532.     DX = action (see #1121)
  6533.     DS:SI -> ASCIZ filename
  6534.     DI = alias hint (number to append to short filename for disambiguation)
  6535. Return: CF clear if successful
  6536.         AX = global file handle
  6537.         CX = action taken
  6538.         0001h file opened
  6539.         0002h file created
  6540.         0003h file replaced
  6541.     CF set on error
  6542.         AX = error code (see #1020)
  6543.         7100h if function not supported
  6544. Note:    for use by real-mode servers only
  6545. SeeAlso: AX=6C00h,AX=716Ch
  6546. --------D-2171AABH00-------------------------
  6547. INT 21 - Windows95 - LONG FILENAME - CREATE SUBST
  6548.     AX = 71AAh
  6549.     BH = 00h
  6550.     BL = drive number (00h = default, 01h = A:, etc.)
  6551.     DS:DX -> ASCIZ pathname to associate with drive letter
  6552. Return: CF clear if successful
  6553.     CF set on error
  6554.         AX = error code (see #1020)
  6555.         7100h if function not supported
  6556. SeeAlso: AX=71AAh/BH=01h,AX=71AAh/BH=02h,INT 2F/AX=1000h,#0984
  6557. --------D-2171AABH01-------------------------
  6558. INT 21 - Windows95 - LONG FILENAME - TERMINATE SUBST
  6559.     AX = 71AAh
  6560.     BH = 01h
  6561.     BL = drive number (01h = A:, etc.)
  6562. Return: CF clear if successful
  6563.     CF set on error
  6564.         AX = error code (see #1020)
  6565.         7100h if function not supported
  6566. Note:    the specified drive number may not be 00h (default), and presumably not
  6567.       the current drive either
  6568. SeeAlso: AX=71AAh/BH=00h,AX=71AAh/BH=02h,INT 2F/AX=1000h,#0984
  6569. --------D-2171AABH02-------------------------
  6570. INT 21 - Windows95 - LONG FILENAME - QUERY SUBST
  6571.     AX = 71AAh
  6572.     BH = 02h
  6573.     BL = drive number (01h = A:, etc.)
  6574.     DS:DX -> buffer for ASCIZ pathname associated with drive letter
  6575. Return: CF clear if successful
  6576.         DS:DX buffer filled
  6577.     CF set on error
  6578.         AX = error code (see #1020)
  6579.         7100h if function not supported
  6580. Note:    the specified drive number may not be 00h (default drive)
  6581. SeeAlso: AX=71AAh/BH=00h,AX=71AAh/BH=01h,INT 2F/AX=1000h,#0984
  6582. --------D-2172-------------------------------
  6583. INT 21 - "Chicago" - LFN-FindClose
  6584.     AH = 72h
  6585.     details not available
  6586. Return:    CF clear if successful
  6587.     CF set on error
  6588.         AX = error code (see #1020)
  6589.         7200h if function not supported (e.g. under bare MS-DOS 7)
  6590. Note:    this function was present in beta versions of Windows95, but is
  6591.       probably not present in the release version
  6592. SeeAlso: AX=71A1h
  6593. --------D-2173-------------------------------
  6594. INT 21 - MS-DOS 7 - DRIVE LOCKING ???
  6595.     AH = 73h
  6596.     DL = drive (0=current, 1=A:, etc.)
  6597.     CL = which flag to get or set
  6598.         00h drive flag???
  6599.         01h ???
  6600.     AL = subfunction
  6601.         00h get ???
  6602.         01h set ???
  6603.         CH = new values for ??? flags
  6604.             bit 1: ??? (CL=00h only)
  6605.             bit 3: ??? (CL=01h only)
  6606. Return: CF clear if successful
  6607.         for AL=00h:
  6608.         AL = value of CL on entry
  6609.         for CL=00h: AH = new flag and 06h (i.e. bits 1 and 2 used)
  6610.         for CL=01h: AH = new flag and 08h (i.e. bit 3 used)
  6611.         (flag being taken from a table of bytes)
  6612.     CF set on error
  6613.         AX = error code (01h,0Fh,etc.) (see #1020)
  6614.         7300h if function not supported
  6615. Note:    these two subfunctions are available even when only the MS-DOS kernel
  6616.       is running
  6617. --------D-217302-----------------------------
  6618. INT 21 - MS-DOS 7 (Windows95) - FAT32 - "Get_ExtDPB" - GET EXTENDED DPB
  6619.     AX = 7302h
  6620.     DL = drive number (00h=default, 01h=A:, etc.)
  6621.     ES:DI -> buffer for drive parameter block (DPB) (see #3295)
  6622.     CX = length of buffer
  6623. Return: CF clear if successful
  6624.         ES:DI buffer filled
  6625.     CF set on error
  6626.         AX = error code
  6627. SeeAlso: AX=7303h,AX=7304h,AH=1Fh,AH=32h
  6628.  
  6629. Format of Extended Drive Parameter Block:
  6630. Offset    Size    Description    (Table 3295)
  6631.  00h 24 BYTEs    standard DOS 4+ DPB
  6632.  18h    BYTE    "dpb_flags" (undocumented)
  6633.  19h    DWORD    pointer to next DPB
  6634.  1Dh    WORD    cluster at which to start search for free space when writing,
  6635.         usually the last cluster allocated
  6636.  1Fh    WORD    number of free clusters on drive, FFFFh = unknown
  6637.  21h    WORD    high word of free cluster count
  6638.  23h    WORD    active FAT/mirroring
  6639.         bits 3-0: the 0-based FAT number of the active FAT
  6640.         bits 6-4: reserved (0)
  6641.         bit 7: do not mirror active FAT to inactive FATs
  6642.  25h    WORD    sector number of file system information sector, or
  6643.           FFFFh for none (see also #3296)
  6644.  27h    WORD    sector number of backup boot sector
  6645.  29h    DWORD    first sector number of the first cluster
  6646.  2Dh    DWORD    maximum cluster number
  6647.  31h    DWORD    number of sectors occupied by FAT
  6648.  35h    DWORD    cluster number of start of root directory
  6649. Note:    except for offset 18h, all of the first 33 bytes are identical to
  6650.       the standard DOS 4-6 DPB
  6651. SeeAlso: #0742 at AH=32h,#3300
  6652.  
  6653. Format of File System Information structure:
  6654. Offset    Size    Description    (Table 3296)
  6655.  00h    DWORD    signature 61417272h
  6656.  04h    DWORD    number of free clusters (FFFFFFFFh if unknown)
  6657.  08h    DWORD    most recently allocated cluster
  6658.  0Ch 12 BYTEs    reserved
  6659. SeeAlso: #3295
  6660. --------D-217303-----------------------------
  6661. INT 21 - MS-DOS 7 (Windows95) - FAT32 - GET EXTENDED FREE SPACE ON DRIVE
  6662.     AX = 7303h
  6663.     DS:DX -> ASCIZ string for drive ("C:\" or "\\SERVER\Share")
  6664.     ES:DI -> buffer for extended free space structure (see #3297)
  6665.     CX = length of buffer for extended free space
  6666. Return: CF clear if successful
  6667.         ES:DI buffer filled
  6668.     CF set on error
  6669.         AX = error code
  6670. SeeAlso: AX=7302h,AX=7304h,AX=7305h,AH=36h
  6671.  
  6672. Format of extended free space structure:
  6673. Offset    Size    Description    (Table 3297)
  6674.  00h    WORD    ??? "The true size of the drive. Get_ExtFreeSpace returns
  6675.           the value to this field."
  6676.  02h    WORD    (call) structure version??? (0000h)
  6677.         (ret) ???
  6678.  04h    DWORD    number of sectors per cluster (with adjustment for compression)
  6679.  08h    DWORD    number of bytes per sector
  6680.  1Ch    DWORD    number of available clusters
  6681.  20h    DWORD    total number of clusters on the drive
  6682.  24h    DWORD    number of physical sectors available on the drive, without
  6683.           adjustment for compression
  6684.  28h    DWORD    total number of physical sectors on the drive, without
  6685.           adjustment for compression
  6686.  2Ch    DWORD    number of available allocation units, without adjustment
  6687.           for compression
  6688.  30h    DWORD    total allocation units, without adjustment for compression
  6689.  34h  8 BYTEs    reserved
  6690. --------D-217304-----------------------------
  6691. INT 21 - MS-DOS 7 (Windows95) - FAT32 - Set DPB TO USE FOR FORMATTING
  6692.     AX = 7304h
  6693.     DL = drive number (00h=default, 01h=A:, etc.)
  6694.     ES:DI -> buffer for Set_DPBforFormat structure (see #3298)
  6695. Return: CF clear if successful
  6696.         ES:DI buffer updated
  6697.     CF set on error
  6698.         AX = error code
  6699. SeeAlso: AX=7302h,AX=7303h,AX=7305h
  6700.  
  6701. Format of Set_DPBforFormat structure:
  6702. Offset    Size    Description    (Table 3298)
  6703.  00h    WORD    (call) size
  6704.  02h    WORD    (call) structure version???  (0000h)
  6705.         (ret) ???
  6706.  04h    DWORD    (call) function number
  6707.         00h invalidate DPB counts
  6708.         01h rebuild DPB from BPB
  6709.         02h force media change (next access to drive rebuild DPB)
  6710.         03h get/set active FAT number and mirroring
  6711.         04h get/set root directory cluster number
  6712. ---function 00h---
  6713.  08h    DWORD    new DPB free count (00000000h=no change, FFFFFFFFh=unknown)
  6714.  0Ch    DWORD    new DPB next-free (00000000h=no change, FFFFFFFFh=unknown)
  6715.  10h    DWORD    unused
  6716.  14h    DWORD    unused
  6717. ---function 01h---
  6718.  08h    DWORD    unused???
  6719.  0Ch    DWORD    (call) -> BIOS Parameter Block from which to rebuild DPB
  6720.  10h    DWORD    unused
  6721.  14h    DWORD    unused
  6722. ---function 02h---
  6723.  08h    DWORD    unused
  6724.  0Ch    DWORD    unused
  6725.  10h    DWORD    unused
  6726.  14h    DWORD    unused
  6727. ---function 03h---
  6728.  08h    DWORD    (call) new active FAT/mirroring state, or FFFFFFFFh to get
  6729.         bits 3-0: the 0-based FAT number of the active FAT
  6730.         bits 6-4: reserved (0)
  6731.         bit 7: do not mirror active FAT to inactive FATs
  6732.  0Ch    DWORD    (ret) previous active FAT/mirroring state (as above)
  6733.  10h    DWORD    unused
  6734.  14h    DWORD    unused
  6735. ---function 04h---
  6736.  08h    DWORD    (call) new root directory cluster number
  6737.             FFFFFFFFh to get current
  6738.  0Ch    DWORD    (ret) previous root directory cluster number
  6739.  10h    DWORD    unused
  6740.  14h    DWORD    unused
  6741. --------D-217305-----------------------------
  6742. INT 21 - MS-DOS 7 (Windows95) - FAT32 - EXTENDED ABSOLUTE DISK READ/WRITE
  6743.     AX = 7305h
  6744.     DL = drive number (00h=default, 01h=A:, etc.)
  6745.     SI = read/write mode flags (see #3299)
  6746.     DS:BX -> disk I/O packet (see #1884 at INT 25)
  6747. Return: CF clear if successful
  6748.     CF set on error
  6749.         AX = error code
  6750. SeeAlso: AX=7302h,AX=7304h,INT 25,INT 26
  6751.  
  6752. Bitfields for Extended Absolute Disk Read/Write mode flags:
  6753. Bit(s)    Description    (Table 3299)
  6754.  0    direction (0=read, 1=write)
  6755.  12-1    reserved (0)
  6756.  14-13    write type (should be 00 on reads)
  6757.     00 unknown data
  6758.     01 FAT data
  6759.     10 directory data
  6760.     11 file data
  6761.  15    reserved (0)
  6762. --------v-217575-----------------------------
  6763. INT 21 - VIRUS - "LEGO" -INSTALLATION CHECK
  6764.     AX = 7575h
  6765. Return: AX = 4321h if resident
  6766. SeeAlso: AX=6969h,AH=76h"VIRUS"
  6767. --------v-2176-------------------------------
  6768. INT 21 - VIRUS - "Klaeren"/"Hate" - INSTALLATION CHECK
  6769.     AH = 76h
  6770. Return: AL = 48h if resident
  6771. SeeAlso: AX=7575h,AX=7700h"VIRUS"
  6772. --------v-217700-----------------------------
  6773. INT 21 - VIRUS - "Growing Block" - INSTALLATION CHECK
  6774.     AX = 7700h
  6775. Return: AX = 0920h if resident
  6776. SeeAlso: AH=76h,AX=7BCEh,AH=7Fh
  6777. --------V-217734-----------------------------
  6778. INT 21 U - SCROLLit v1.7 - INSTALLATION CHECK
  6779.     AX = 7734h
  6780. Return: DX = 3477h if installed
  6781.         AX = segment of resident code
  6782. Program: ScrollIt is a shareware backscroll utility by Bromfield Software
  6783.       Products
  6784. --------U-217761-----------------------------
  6785. INT 21 - WATCH.COM v3.2+ - INSTALLATION CHECK
  6786.     AX = 7761h ('wa')
  6787. Return: AX = 6177h
  6788. Note:    WATCH.COM is part of the "TSR" package by TurboPower Software
  6789. SeeAlso: INT 16/AX=7761h
  6790. --------v-217BCE-----------------------------
  6791. INT 21 - VIRUS - "Whisper"/"Taipan" - INSTALLATION CHECK
  6792.     AX = 7BCEh
  6793. Return: AX = 7BCEh if resident (???)
  6794. SeeAlso: AX=5454h"VIRUS",AX=7700h,AX=7BCFh,AH=7Fh"VIRUS"
  6795. --------v-217BCF-----------------------------
  6796. INT 21 - VIRUS - "Tai-Pan.666"/"Doom II Death" - INSTALLATION CHECK
  6797.     AX = 7BCFh
  6798. Return: AX = 7BCFh if resident
  6799. SeeAlso: AX=7BCEh"VIRUS",AH=7Dh"VIRUS"
  6800. --------v-217D-------------------------------
  6801. INT 21 - VIRUS - "OffSpring" - INSTALLATION CHECK
  6802.     AH = 7Dh
  6803. Return: AH = FAh if installed
  6804. SeeAlso: AX=7BCFh"VIRUS",AH=7Fh"VIRUS"
  6805. --------v-217F-------------------------------
  6806. INT 21 - VIRUS - "Squeaker","ASeXual" - INSTALLATION CHECK
  6807.     AH = 7Fh
  6808. Return: AH = 80h if resident
  6809. SeeAlso: AX=7BCEh,AH=83h"VIRUS"
  6810. --------D-2180-------------------------------
  6811. INT 21 - European MS-DOS 4.0 - "AEXEC" - EXECUTE PROGRAM IN BACKGROUND
  6812.     AH = 80h
  6813.     CX = mode
  6814.         0000h place child in zombie mode on exit to preserve exit code
  6815.         0001h discard child process and exit code on termination
  6816.     DS:DX -> ASCIZ full program name
  6817.     ES:BX -> parameter block (as for AX=4B00h)
  6818. Return: CF clear if successful
  6819.         AX = Command Subgroup ID (CSID)
  6820.     CF set on error
  6821.         AX = error code (see #1020 at AH=59h/BX=0000h)
  6822. Program: European MS-DOS 4.0 was written for Siemens in Germany and then used
  6823.       by several other European OEMs; its release falls between mainstream
  6824.       versions 3.2 and 3.3
  6825. Desc:    asynchronously execute a program, creating a new process for it
  6826. Notes:    this function is called by the DETACH command
  6827.     there is a system-wide limit of 32 processes
  6828.     the CSID is used to identify all processes that have been spawned by
  6829.       a given process, whether directly or indirectly
  6830.     programs to be run in the background must use the new executable format
  6831.       (see #0937 at AH=4Bh)
  6832.     background processes may only perform asynchronous (background) EXECs,
  6833.       either this function or AX=4B04h
  6834.     background processes may execute INT 11, INT 12, INT 21, INT 2A, and
  6835.       INT 2F at any time; they may execute INT 10 and INT 16 only while
  6836.       they have opened a popup screen via INT 2F/AX=1401h; no other
  6837.       interrupts may be executed from the background
  6838.     background processes may not use drive B: or overlay their code
  6839.       segments
  6840.     see AX=8700h for an installation check
  6841.     the "NE" new executable format made its first appearance in European
  6842.       MS-DOS 4.0
  6843. SeeAlso: AH=4Bh,AH=87h,INT 2F/AX=1400h"POPUP"
  6844. ----------218080-----------------------------
  6845. INT 21 - PCW Weather Card interface - UNINSTALL PCW.COM AND FREE MEMORY
  6846.     AX = 8080h
  6847. Return: ???
  6848. SeeAlso: AX=7070h/BX=7070h
  6849. --------D-2181-------------------------------
  6850. INT 21 - European MS-DOS 4.0 - "FREEZE" - STOP A PROCESS
  6851.     AH = 81h
  6852.     BX = flag (00h freeze command subtree, 01h only specified process)
  6853.     CX = Process ID of head of command subtree
  6854. Return: CF clear if successful
  6855.     CF set on error
  6856.         AX = error code (no such process)
  6857. Desc:    temporarily suspend a process or a process and all of its children
  6858. Note:    if BX=0001h, this call will not return until the process is actually
  6859.       frozen, which may not be until after it unblocks from an I/O
  6860.       operation
  6861. SeeAlso: AH=82h,AH=89h,AX=8E00h,INT 15/AX=101Dh
  6862. --------D-2182-------------------------------
  6863. INT 21 - European MS-DOS 4.0 - "RESUME" - RESTART A PROCESS
  6864.     AH = 82h
  6865.     BX = flag (00h resume command subtree, 01h only specified process)
  6866.     CX = Process ID of head of command subtree
  6867. Return: CF clear if successful
  6868.     CF set on error
  6869.         AX = error code (no such process)
  6870. Desc:    restart a previously-suspended process or a process and all of its
  6871.       children
  6872. SeeAlso: AH=81h,INT 15/AX=101Eh
  6873. --------D-2183-------------------------------
  6874. INT 21 - European MS-DOS 4.0 - "PARTITION" - GET/SET FOREGROUND PARTITION SIZE
  6875.     AH = 83h
  6876.     AL = function
  6877.         00h get size
  6878.         01h set new size
  6879.         BX = new size in paragraphs
  6880. Return: CF clear if successful
  6881.         BX = current size (function 00h) or old size (function 01h)
  6882.     CF set on error
  6883.         AX = error code (01h,07h,0Dh)(see #1020 at AH=59h/BX=0000h)
  6884. Desc:    specify or determine how much memory may be allocated by the foreground
  6885.       process
  6886. Note:    if the partition size is set to 0000h, no partition management is done
  6887.       and all memory allocation is compatible with DOS 3.2.
  6888.     the partition size can be changed regardless of what use is being made
  6889.       of the changed memory; subsequent allocations will follow the
  6890.       partition rules (foreground processes may allocate only foreground
  6891.       memory; background processes allocate background memory first, then
  6892.       foreground memory)
  6893. SeeAlso: AH=48h,AH=4Ah
  6894. --------v-2183-------------------------------
  6895. INT 21 - VIRUS - "SVC" - INSTALLATION CHECK
  6896.     AH = 83h
  6897. Return: DX = 1990h if resident
  6898. SeeAlso: AH=76h,AH=84h"VIRUS"
  6899. --------v-2184-------------------------------
  6900. INT 21 - VIRUS - "SVC 5.0" or "SVC 6.0" - INSTALLATION CHECK
  6901.     AH = 84h
  6902. Return: DX = 1990h if resident
  6903.         BH = version number (major in high nybble, minor in low)
  6904. SeeAlso: AH=83h"VIRUS",AH=89h"VIRUS"
  6905. --------D-218400-----------------------------
  6906. INT 21 - European MS-DOS 4.0 - "CREATMEM" - CREATE A SHARED MEMORY AREA
  6907.     AX = 8400h
  6908.     BX = size in bytes (0000h = 65536)
  6909.     CX = flags
  6910.         bit 6: zero-initialize segment
  6911.     DS:DX -> ASCIZ name (must begin with "\SHAREMEM\")
  6912. Return: CF clear if successful
  6913.         AX = segment address of shared memory global object
  6914.     CF set on error
  6915.         AX = error code (06h,08h) (see #1020 at AH=59h/BX=0000h)
  6916. Desc:    create an area of memory which may be accessed by multiple processes
  6917. Notes:    shared memory objects are created as special files (thus the
  6918.       restriction on the name)
  6919.     on successful creation, the reference count is set to 1
  6920. SeeAlso: AX=8401h,AX=8402h,INT 15/AX=DE19h
  6921. --------D-218401-----------------------------
  6922. INT 21 - European MS-DOS 4.0 - "GETMEM" - OBTAIN ACCESS TO SHARED MEMORY AREA
  6923.     AX = 8401h
  6924.     CX = flags
  6925.         bit 7: writable segment (ignored by MS-DOS 4.0)
  6926.     DS:DX -> ASCIZ name (must begin with "\SHAREMEM\")
  6927. Return: CF clear if successful
  6928.         AX = segment address of shared memory global object
  6929.         CX = size in bytes
  6930.     CF set on error
  6931.         AX = error code (invalid name)
  6932. Desc:    get address of a previously-created area of memory which may be
  6933.       accessed by multiple processes
  6934. Note:    this call increments the reference count for the shared memory area
  6935. SeeAlso: AX=8400h,AX=8402h
  6936. --------D-218402-----------------------------
  6937. INT 21 - European MS-DOS 4.0 - "RELEASEMEM" - FREE SHARED MEMORY AREA
  6938.     AX = 8402h
  6939.     BX = handle (segment address of shared memory object)
  6940. Return: CF clear if successful
  6941.     CF set on error
  6942.         AX = error code (no such name)
  6943. Desc:    indicate that the specified area of shared memory will no longer be
  6944.       used by the caller
  6945. Note:    the reference count is decremented and the shared memory area is
  6946.       deallocated if the new reference count is zero
  6947. SeeAlso: AX=8400h,AX=8401h,INT 15/AX=DE19h
  6948. --------D-2185-------------------------------
  6949. INT 21 U - European MS-DOS 4.0 - ???
  6950.     AH = 85h
  6951.     ???
  6952. Return: ???
  6953. --------D-2186-------------------------------
  6954. INT 21 - European MS-DOS 4.0 - "SETFILETABLE" - INSTALL NEW FILE HANDLE TABLE
  6955.     AH = 86h
  6956.     BX = total number of file handles in new table
  6957. Return: CF clear if successful
  6958.     CF set on error
  6959.         AX = error code (06h,08h) (see #1020 at AH=59h/BX=0000h)
  6960. Desc:    adjust the size of the per-process open file table, thus raising or
  6961.       lowering the limit on the number of files the caller can open
  6962.       simultaneously
  6963. Notes:    any currently-open files are copied to the new table
  6964.     if the table is increased beyond the default 20 handles, only the
  6965.       first 20 will be inherited by child processes
  6966.     error 06h is returned if the requested number of handles exceeds
  6967.       system limits or would require closing currently-open files
  6968. SeeAlso: AH=26h,AH=67h
  6969. --------D-2187-------------------------------
  6970. INT 21 - European MS-DOS 4.0 - "GETPID" - GET PROCESS IDENTIFIER
  6971.     AH = 87h
  6972. Return: AX = PID
  6973.     BX = parent process's PID
  6974.     CX = Command Subgroup ID (CSID)
  6975. Program: European MS-DOS 4.0 was written for Siemens in Germany and then used
  6976.       by several other European OEMs; its release falls between mainstream
  6977.       versions 3.2 and 3.3
  6978. Desc:    determine an identifier by which to access the calling process
  6979. Notes:    called by MS C v5.1 getpid() function
  6980.     this function apparently must return AX=0001h for INT 21/AH=80h to
  6981.       succeed
  6982.     one possible check for European MS-DOS 4.0 is to issue this call with
  6983.       AL=00h and check whether AL is nonzero on return
  6984. SeeAlso: AH=30h,AH=62h,AH=80h
  6985. Index:    installation check;European MS-DOS 4.0
  6986. --------D-2188-------------------------------
  6987. INT 21 U - European MS-DOS 4.0 - ???
  6988.     AH = 88h
  6989.     ???
  6990. Return: ???
  6991. SeeAlso: AH=87h
  6992. --------D-2189-------------------------------
  6993. INT 21 - European MS-DOS 4.0 - SLEEP
  6994.     AH = 89h
  6995.     CX = time in milliseconds or 0000h to give up time slice
  6996. Return: CF clear if successful
  6997.         CX = 0000h
  6998.     CF set on error
  6999.         AX = error code (interrupted system call)
  7000.         CX = sleep time remaining
  7001. Desc:    suspend the calling process for the specified duration
  7002. Notes:    the sleep interval is rounded up to the next higher increment of the
  7003.       scheduler clock, and may be extended further if other processes are
  7004.       running
  7005.     this call may be interrupted by signals (see AH=8Dh)
  7006.     reportedly called by Microsoft C 4.0 startup code
  7007.     background processes have higher priority than the foreground process,
  7008.       and should thus periodically yield the CPU
  7009. SeeAlso: AH=81h,INT 15/AX=1000h,INT 2F/AX=1680h,INT 7A/BX=000Ah
  7010. --------v-2189-------------------------------
  7011. INT 21 - VIRUS - "Vriest" - INSTALLATION CHECK
  7012.     AH = 89h
  7013. Return: AX = 0123h if resident
  7014. SeeAlso: AH=84h"VIRUS",AH=90h"VIRUS"
  7015. --------D-218A-------------------------------
  7016. INT 21 - European MS-DOS 4.0 - "CWAIT" - WAIT FOR CHILD TO TERMINATE
  7017.     AH = 8Ah
  7018.     BL = range (00h command subtree, 01h any child)
  7019.     BH = suspend flag
  7020.         00h suspend if children exist but none are dead
  7021.         01h return if no dead children
  7022.     CX = Process ID of head of command subtree
  7023. Return: CF clear if successful
  7024.         AH = termination type (see #1126)
  7025.         AL = return code from child or aborting signal
  7026.         BX = PID of child (0000h if no dead children)
  7027.     CF set on error
  7028.         AX = error code (no child,interrupted system call)
  7029. Desc:    get return code from an asynchronously-executed child program,
  7030.       optionally waiting if no return code is available
  7031. SeeAlso: AH=4Bh,AH=4Dh,AH=80h,AH=8Dh
  7032.  
  7033. (Table 1126)
  7034. Values for termination type:
  7035.  00h    normal termination
  7036.  01h    aborted by Control-C
  7037.  02h    aborted by I/O error
  7038.  03h    terminate and stay resident
  7039.  04h    aborted by signal
  7040.  05h    aborted by program error
  7041. --------D-218B-------------------------------
  7042. INT 21 U - European MS-DOS 4.0 - ???
  7043.     AH = 8Bh
  7044.     ???
  7045. Return: ???
  7046. SeeAlso: AH=87h
  7047. --------D-218C-------------------------------
  7048. INT 21 - European MS-DOS 4.0 - SET SIGNAL HANDLER
  7049.     AH = 8Ch
  7050.     AL = signal number (see #1127)
  7051.     BL = action (see #1128)
  7052.     DS:DX -> signal handler (see #1129)
  7053. Return: CF clear if successful
  7054.         AL = previous action
  7055.         ES:BX -> previous signal handler
  7056.     CF set on error
  7057.         AX = error code (01h,invalid SigNumber or Action)
  7058.           (see #1020 at AH=59h/BX=0000h)
  7059. Desc:    set the routine which will be invoked on a number of exceptional
  7060.       conditions
  7061. Note:    all signals will be sent to the most recently installed handler
  7062. SeeAlso: AH=8Dh
  7063.  
  7064. (Table 1127)
  7065. Values for European MS-DOS 4.0 signal number:
  7066.  01h    SIGINTR        Control-C or user defined interrupt key
  7067.  08h    SIGTERM        program termination
  7068.  09h    SIGPIPE        broken pipe
  7069.  0Dh    SIGUSER1    reserved for user definition
  7070.  0Eh    SIGUSER2    reserved for user definition
  7071.  
  7072. (Table 1128)
  7073. Values for signal action:
  7074.  00h    SIG_DFL        terminate process on receipt
  7075.  01h    SIG_IGN        ignore signal
  7076.  02h    SIG_GET        signal is accepted
  7077.  03h    SIG_ERR        sender gets error
  7078.  04h    SIG_ACK        acknowledge received signal and clear it, but don't
  7079.               change current setting
  7080.  
  7081. (Table 1129)
  7082. Values signal handler is called with:
  7083.     AL = signal number (see #1127)
  7084.     AH = signal argument
  7085. Return: RETF, CF set: terminate process
  7086.     RETF, CF clear, ZF set: abort any interrupted system call with an error
  7087.     RETF, CF clear, ZF clear: restart any interrupted system call
  7088.     IRET: restart any interrupted system call
  7089. Note:    the signal handler may also perform a nonlocal GOTO by resetting the
  7090.       stack pointer and jumping; before doing so, it should dismiss the
  7091.       signal by calling this function with BL=04h
  7092. --------D-218D-------------------------------
  7093. INT 21 - European MS-DOS 4.0 - SEND SIGNAL
  7094.     AH = 8Dh
  7095.     AL = signal number (see #1127)
  7096.     BH = signal argument
  7097.     BL = action
  7098.         00h send to entire command subtree
  7099.         01h send only to specified process
  7100.     DX = Process ID
  7101. Return: CF clear if successful
  7102.     CF set on error
  7103.         AX = error code (01h,06h)(see #1020 at AH=59h/BX=0000h)
  7104. Desc:    invoke the exceptional-condition handler for the specified process
  7105. Note:    error 06h may be returned if one or more of the affected processes
  7106.       have an error handler for the signal
  7107. SeeAlso: AH=8Ch
  7108. --------D-218E00BH00-------------------------
  7109. INT 21 - European MS-DOS 4.0 - "SETPRI" - GET/SET PROCESS PRIORITY
  7110.     AX = 8E00h
  7111.     BH = 00h
  7112.     BL = action
  7113.         00h set priority for command subtree
  7114.         01h set priority for specified process only
  7115.     CX = Process ID
  7116.     DH = 00h
  7117.     DL = change in priority (00h to get priority)
  7118. Return: CF clear if successful
  7119.         DL = process priority
  7120.         DH destroyed
  7121.     CF set on error
  7122.         AX = error code (01h,no such process)(see #1020 at AH=59h)
  7123. Desc:    specify or determine the execution priority of the specified process
  7124.       or the process and all of its children
  7125. SeeAlso: AH=81h
  7126. --------D-218F-------------------------------
  7127. INT 21 U - European MS-DOS 4.0 - ???
  7128.     AH = 8Fh
  7129.     ???
  7130. Return: ???
  7131. SeeAlso: AH=87h
  7132. --------D-2190-------------------------------
  7133. INT 21 U - European MS-DOS 4.0 - ???
  7134.     AH = 90h
  7135.     ???
  7136. Return: ???
  7137. SeeAlso: AH=87h
  7138. --------v-2190-------------------------------
  7139. INT 21 - VIRUS - "Carioca" - INSTALLATION CHECK
  7140.     AH = 90h
  7141. Return: AH = 01h if resident
  7142. SeeAlso: AH=89h"VIRUS",AX=9753h"VIRUS"
  7143. --------D-2191-------------------------------
  7144. INT 21 U - European MS-DOS 4.0 - ???
  7145.     AH = 91h
  7146.     ???
  7147. Return: ???
  7148. SeeAlso: AH=87h
  7149. --------D-2192-------------------------------
  7150. INT 21 U - European MS-DOS 4.0 - ???
  7151.     AH = 92h
  7152.     ???
  7153. Return: ???
  7154. SeeAlso: AH=87h
  7155. --------D-2193-------------------------------
  7156. INT 21 - European MS-DOS 4.0 - "PIPE" - CREATE A NEW PIPE
  7157.     AH = 93h
  7158.     CX = size in bytes
  7159. Return: CF clear if successful
  7160.         AX = read handle
  7161.         BX = write handle
  7162.     CF set on error
  7163.         AX = error code (08h) (see #1020 at AH=59h/BX=0000h)
  7164. Desc:    create a communications channel which may be used for interprocess
  7165.       data and command exchanges
  7166. SeeAlso: AH=3Ch,AH=3Fh"DOS",AH=40h"DOS",AH=84h
  7167. --------D-2194-------------------------------
  7168. INT 21 U - European MS-DOS 4.0 - ???
  7169.     AH = 94h
  7170.     ???
  7171. Return: ???
  7172. SeeAlso: AH=87h
  7173. --------D-2195-------------------------------
  7174. INT 21 - European MS-DOS 4.0 - HARD ERROR PROCESSING
  7175.     AH = 95h
  7176.     AL = new state
  7177.        00h enabled
  7178.        01h disabled, automatically fail hard errors
  7179. Return: AX = previous setting
  7180. Desc:    specify whether hard (critical) errors should automatically fail the
  7181.       system call or invoke an INT 24
  7182. SeeAlso: INT 24
  7183. --------D-2196-------------------------------
  7184. INT 21 U - European MS-DOS 4.0 - ???
  7185.     AH = 96h
  7186.     ???
  7187. Return: ???
  7188. --------D-2197-------------------------------
  7189. INT 21 U - European MS-DOS 4.0 - ???
  7190.     AH = 97h
  7191.     ???
  7192. Return: ???
  7193. --------v-219753-----------------------------
  7194. INT 21 - VIRUS - "Nina" - INSTALLATION CHECK
  7195.     AX = 9753h
  7196. Return: never (executes original program) if virus resident
  7197. SeeAlso: AH=90h"VIRUS",AX=A1D5h"VIRUS",AX=9AD5h"VIRUS"
  7198. --------D-2198-------------------------------
  7199. INT 21 U - European MS-DOS 4.0 - ???
  7200.     AH = 98h
  7201.     ???
  7202. Return: ???
  7203. --------D-2199-------------------------------
  7204. INT 21 u - European MS-DOS 4.0 - "PBLOCK" - BLOCK A PROCESS
  7205.     AH = 99h
  7206.     DS:BX -> memory location to block on
  7207.     CX = timeout in milliseconds
  7208.     DH = nonzero if interruptable
  7209. Return: CF clear if awakened by event
  7210.         AX = 0000h
  7211.     CF set if unusual wakeup
  7212.         ZF set if timeout, clear if interrupted by signal
  7213.         AX = nonzero
  7214. Desc:    suspend calling process until another process sends a "restart" signal
  7215.       or a timeout occurs
  7216. SeeAlso: AH=9Ah,INT 2F/AX=0802h
  7217. --------D-219A-------------------------------
  7218. INT 21 u - European MS-DOS 4.0 - "PRUN" - UNBLOCK A PROCESS
  7219.     AH = 9Ah
  7220.     DS:BX -> memory location processes may have blocked on
  7221. Return: AX = number of processes awakened
  7222.     ZF set if no processes awakened
  7223. Program: European MS-DOS 4.0 was written for Siemens in Germany and then used
  7224.       by several other European OEMs; its release falls between mainstream
  7225.       versions 3.2 and 3.3
  7226. Desc:    restart all processes waiting for the specified "restart" signal
  7227. SeeAlso: AH=99h,INT 2F/AX=0802h
  7228. --------v-219AD5------------------------
  7229. INT 21 - VIRUS - "Massacre/Beavis" - INSTALLATION CHECK
  7230.     AX = 9AD5h
  7231. Return: AX = 9AD4h if resident
  7232. SeeAlso: AX=6969h"VIRUS",AX=A1D5h"VIRUS"
  7233. --------I-21A0-------------------------------
  7234. INT 21 - Attachmate Extra! - GET 3270 DISPLAY STATE
  7235.     AH = A0h
  7236. Return: AL = display status (see #1130)
  7237.     BX = host window status (see #1131)
  7238. Program: Attachmate Extra! is a 3270 emulator by Attachmate Corporation
  7239. SeeAlso: AH=A1h
  7240.  
  7241. Bitfields for Attachmate Extra! display status:
  7242. Bit(s)    Description    (Table 1130)
  7243.  7    0=windowed, 1=enlarged
  7244.  6-3    current screen profile number 0-9
  7245.  2-0    active window number (0=PC, 1-4=host B-E, 5-6=notepad F-G)
  7246.  
  7247. Bitfields for host window status:
  7248. Bit(s)    Description    (Table 1131)
  7249.  15    reserved
  7250.  14    0=host E window installed, 1=not
  7251.  13    0=host E terminal on, 1=off
  7252.  12    0=host E window displayed, 1=not
  7253.  11    reserved
  7254.  10    0=host D window installed, 1=not
  7255.  9    0=host D terminal on, 1=off
  7256.  8    0=host D window displayed, 1=not
  7257.  7    reserved
  7258.  6    0=host C window installed, 1=not
  7259.  5    0=host C terminal on, 1=off
  7260.  4    0=host C window displayed, 1=not
  7261.  3    reserved
  7262.  2    0=host B window installed, 1=not
  7263.  1    0=host B terminal on, 1=off
  7264.  0    0=host B window displayed, 1=not
  7265. --------I-21A1-------------------------------
  7266. INT 21 - Attachmate Extra! - SET 3270 DISPLAY STATE
  7267.     AH = A1h
  7268.     AL = new display status byte (see #1130)
  7269. SeeAlso: AH=A0h,AH=A2h
  7270. --------v-21A1D5-----------------------------
  7271. INT 21 - VIRUS - "789"/"Filehider" - INSTALLATION CHECK
  7272.     AX = A1D5h
  7273. Return: AX = 900Dh if resident
  7274. SeeAlso: AX=9753h,AX=9AD5h,AX=A55Ah
  7275. --------I-21A2-------------------------------
  7276. INT 21 - Attachmate Extra! - SET HOST WINDOW STATE
  7277.     AH = A2h
  7278.     AL = new host window status byte (see #1132)
  7279. SeeAlso: AH=A1h
  7280.  
  7281. Bitfields for Attachmate Extra! host window status:
  7282. Bit(s)    Description    (Table 1132)
  7283.  7    0=power off, 1=power on
  7284.  6    0=not installed, 1=installed
  7285.  5-3    reserved
  7286.  2-0    window number 1-4=host B-E
  7287. --------I-21A3-------------------------------
  7288. INT 21 - Attachmate Extra! - SEND KEYSTROKES TO HOST WINDOW
  7289.     AH = A3h
  7290.     AL = window number (1-4=host B-E)
  7291.     CX = 0001h
  7292.     DS:BX -> keystroke buffer
  7293.     DL = zero if keystroke buffer contains host function code (see #1133),
  7294.           non-zero if keystroke buffer contains ASCII character
  7295. Return: CX = zero if character sent, non-zero if not
  7296.     BX incremented if CX=0
  7297.  
  7298. (Table 1133)
  7299. Values for Attachmate Extra! host function code:
  7300.  00h=reserved    10h=PF16    20h=Clear    30h=SysReq
  7301.  01h=PF1    11h=PF17    21h=Print    31h=ErInp
  7302.  02h=PF2    12h=PF18    22h=Left    32h=ErEof
  7303.  03h=PF3    13h=PF19    23h=Right    33h=Ident
  7304.  04h=PF4    14h=PF20    24h=Up        34h=Test
  7305.  05h=PF5    15h=PF21    25h=Down    35h=Reset
  7306.  06h=PF6    16h=PF22    26h=Home    36h=DevCncl
  7307.  07h=PF7    17h=PF23    27h=Fast Left    37h=Dup
  7308.  08h=PF8    18h=PF24    28h=Fast Right    38h=FldMark
  7309.  09h=PF9    19h=Alt on    29h=Bksp    39h=Enter
  7310.  0Ah=PF10    1Ah=Alt off    2Ah=Insert    3Ah=CrSel
  7311.  0Bh=PF11    1Bh=Shift on    2Bh=Delete
  7312.  0Ch=PF12    1Ch=Shift off    2Ch=Backtab
  7313.  0Dh=PF13    1Dh=PA1        2Dh=Tab
  7314.  0Eh=PF14    1Eh=PA2        2Eh=Newline
  7315.  0Fh=PF15    1Fh=PA3        2Fh=Attn
  7316. --------I-21A4-------------------------------
  7317. INT 21 - Attachmate Extra! - GET HOST WINDOW BUFFER ADDRESS
  7318.     AH = A4h
  7319.     AL = window number (1-4=host B-E)
  7320. Return: DS:BX -> 3270 display buffer
  7321. SeeAlso: AH=A5h,AH=B8h
  7322. --------I-21A5-------------------------------
  7323. INT 21 - Attachmate Extra! - GET HOST WINDOW CURSOR POSITION
  7324.     AH = A5h
  7325.     AL = window number (1-4=host B-E)
  7326. Return: BX = cursor position (80 * row + column, where 0:0 is upper left)
  7327. Note:    if the host window is configured with the Extended Attribute (EAB)
  7328.       feature, multiply the cursor position by 2 to obtain the byte offset
  7329.       into the display buffer
  7330. SeeAlso: AH=A4h
  7331. --------v-21A55A-----------------------------
  7332. INT 21 - VIRUS - "Eddie-2" - INSTALLATION CHECK
  7333.     AX = A55Ah
  7334. Return: AX = 5AA5h if resident
  7335. SeeAlso: AX=A1D5h,AX=AA00h
  7336. --------v-21AA00-----------------------------
  7337. INT 21 - VIRUS - "Blinker" - INSTALLATION CHECK
  7338.     AX = AA00h
  7339. Return: AX = 00AAh if resident
  7340. SeeAlso: AX=A55Ah,AX=AA03h
  7341. --------v-21AA03-----------------------------
  7342. INT 21 - VIRUS - "Backtime" - INSTALLATION CHECK
  7343.     AX = AA03h
  7344. Return: AX = 03AAh if resident
  7345. SeeAlso: AX=AA00h,AH=ABh
  7346. --------v-21AB-------------------------------
  7347. INT 21 - VIRUS - "600" or "Voronezh"-family - INSTALLATION CHECK
  7348.     AH = ABh
  7349. Return: AX = 5555h if resident
  7350. SeeAlso: AX=AA03h,AX=ABCDh,AX=BBBBh"VIRUS"
  7351. --------v-21ABCD-----------------------------
  7352. INT 21 - VIRUS - Major BBS - INSTALLATION CHECK
  7353.     AX = ABCDh
  7354. Return: AX = 1234h if installed
  7355. SeeAlso: AH=ABh"VIRUS",AX=ABCDh"SuperVirus"
  7356. --------v-21ABCD------------------------
  7357. INT 21 - VIRUS - "SuperVirus 2" - INSTALLATION CHECK
  7358.     AX = ABCDh
  7359. Return: AX = DCBAh if resident
  7360. SeeAlso: AX=ABCDh"VIRUS",AX=BBBBh"VIRUS"
  7361. --------I-21AF-------------------------------
  7362. INT 21 - Attachmate Extra! - GET TRANSLATE TABLE ADDRESS
  7363.     AH = AFh
  7364. Return: DS:BX -> translate tables (see #1134)
  7365.  
  7366. Format of Attachmate Extra! translate tables:
  7367. Offset    Size    Description    (Table 1134)
  7368.  00h 256 BYTEs    ASCII to 3270 buffer code translate table
  7369. 100h 256 BYTEs    3270 buffer code to ASCII translate table
  7370. 200h 256 BYTEs    3270 buffer code to EBCDIC translate table
  7371. 300h 256 BYTEs    EBCDIC to 3270 buffer code translate table
  7372. --------v-21B3-------------------------------
  7373. INT 21 - VIRUS - "Requires" - INSTALLATION CHECK
  7374.     AH = B3h
  7375. Return: AX = 9051h if resident
  7376. SeeAlso: AH=7Fh"VIRUS",AX=B974h"VIRUS"
  7377. --------N-21B300-----------------------------
  7378. INT 21 U - Novell NetWare - CHECK LIP/PACKET SIGNING/IPX CHECKSUM SUPPORT???
  7379.     AX = B300h
  7380. Return: AX = 0000h if supported???
  7381. Note:    this function appeared with the packet signing/Large Internet Packets/
  7382.       IPX Checksum-aware NetWare shells
  7383. SeeAlso: AX=B301h,AX=B302h
  7384. --------N-21B301-----------------------------
  7385. INT 21 U - Novell NetWare - CHECK SIGNATURE LEVEL???
  7386.     AX = B301h
  7387. Return: AX = 0000h if supported???
  7388.         BX:CX indicate signature level (see #1135)
  7389. Note:    this function appeared with the packet signing/Large Internet Packets/
  7390.       IPX Checksum-aware NetWare shells
  7391. SeeAlso: AX=B300h,AX=B304h,#2154 at INT 2F/AX=7A20h/BX=0000h
  7392.  
  7393. (Table 1135)
  7394. Values for signature level indicator:
  7395.  0000h:0000h = signature level 0
  7396.  0002h:0000h = signature level 1
  7397.  0202h:0000h = signature level 2
  7398.  0202h:0202h = signature level 3
  7399. --------N-21B302-----------------------------
  7400. INT 21 U - Novell NetWare - START PACKET SIGNING
  7401.     AX = B302h
  7402.     CX = server connection (1-8)
  7403.     DS:SI -> 24-byte buffer containing ???
  7404. Return: ???
  7405. Notes:    this function appeared with the packet signing/Large Internet Packets/
  7406.       IPX Checksum-aware NetWare shells
  7407.     if packet signing is active, this call is required if and only if the
  7408.       last call successfully authenticated the workstation to the server
  7409. SeeAlso: AX=B300h,#2154
  7410. --------N-21B304-----------------------------
  7411. INT 21 U - Novell NetWare - SET SIGNATURE LEVEL
  7412.     AX = B304h
  7413.     BX:CX = new signature level (see AX=B301h)
  7414. Return: ???
  7415. Note:    this function appeared with the packet signing/Large Internet Packets/
  7416.       IPX Checksum-aware NetWare shells
  7417. SeeAlso: AX=B300h,AX=B301h,AX=B306h,#2154
  7418. --------N-21B306-----------------------------
  7419. INT 21 - Novell NetWare - RENEGOTIATE SECURITY LEVEL
  7420.     AX = B306h
  7421.     CX = server connection number (01h-08h)
  7422. Return: ???
  7423. Note:    this function appeared with the packet signing/Large Internet Packets/
  7424.       IPX Checksum-aware NetWare shells
  7425. SeeAlso: AX=B300h,AX=B304h,#2154
  7426. --------N-21B4-------------------------------
  7427. INT 21 U - Novell NetWare - "AttachHandle"
  7428.     AH = B4h
  7429.     DS:SI -> input buffer (see #1136)
  7430. Return: AX = DOS file handle or return code
  7431. Note:    this is an interface provided by NetWare to give DOS file access to
  7432.       NetWare files on non-DOS systems such as Macintosh, OS/2, and Unix
  7433. SeeAlso: AX=E909h
  7434.  
  7435. Format of Novell NetWare input buffer:
  7436. Offset    Size    Description    (Table 1136)
  7437.  00h    BYTE    "WorkFileServer"
  7438.  01h    BYTE    access code
  7439.  02h    DWORD    "OpenHandle"
  7440.  06h    WORD    "OpenHandleCount"
  7441.  08h    DWORD    "OpenFileSize"
  7442. Note:    the six bytes at 02h-07h appear to be the six-byte NetWare handle
  7443.       returned by AX=E909h
  7444. --------N-21B500-----------------------------
  7445. INT 21 U - Novell NetWare - VNETWARE.386 API - GET INSTANCE DATA
  7446.     AX = B500h
  7447. Return: ES:BX -> data
  7448.     CX = length
  7449. SeeAlso: AX=B501h,AX=B502h
  7450. --------N-21B501-----------------------------
  7451. INT 21 U - Novell NetWare - VNETWARE.386 API - END VIRTUAL MACHINE
  7452.     AX = B501h
  7453. SeeAlso: AX=B500h,AX=B502h
  7454. --------N-21B502-----------------------------
  7455. INT 21 U - Novell NetWare - VNETWARE.386 API - START VIRTUAL MACHINE
  7456.     AX = B502h
  7457. SeeAlso: AX=B500h,AX=B501h
  7458. --------N-21B5-------------------------------
  7459. INT 21 - Novell NetWare shell 3.01 - TASK MODE CONTROL
  7460.     AH = B5h
  7461.     AL = subfunction
  7462.         03h get task mode
  7463.         Return: AH = 00h
  7464.             AL = current task mode byte (see #1137)
  7465.         04h get task mode pointer
  7466.         Return: ES:BX -> task mode byte
  7467. Notes:    the task mode byte specifies how task cleanup should be performed, but
  7468.       is declared to be version-dependent
  7469.     allows a program to disable the automatic cleanup for programs managing
  7470.       task swapping, etc.
  7471.  
  7472. (Table 1137)
  7473. Values for NetWare task mode byte in version 3.01:
  7474.  00h-03h reserved
  7475.  04h     no task cleanup
  7476. --------N-21B505-----------------------------
  7477. INT 21 U - Novell NetWare - VNETWARE.386 API - SET VIRTUAL MACHINE ID
  7478.     AX = B505h
  7479.     ???
  7480. Return: ???
  7481. SeeAlso: AX=B502h,AX=B506h
  7482. --------N-21B506-----------------------------
  7483. INT 21 U - Novell NetWare - VNETWARE.386 API - GET VIRTUAL MACH SUPPORT LEVEL
  7484.     AX = B506h
  7485. Return: AX = ??? (0002h)
  7486. SeeAlso: AX=B505h
  7487. --------N-21B507-----------------------------
  7488. INT 21 - Novell NetWare - NetWare Shell - GET NUMBER OF PACKET BURST BUFFERS
  7489.     AX = B507h
  7490. Return: AL = number of packet burst buffers (configured at shell load time)
  7491. --------N-21B6-------------------------------
  7492. INT 21 - Novell NetWare - FILE SERVICES - EXTENDED FILE ATTRIBUTES
  7493.     AH = B6h
  7494.     AL = subfunction
  7495.         00h get extended file attributes
  7496.         01h set extended file attributes
  7497.         CL = extended file attributes (see #1138)
  7498.     DS:DX -> ASCIZ pathname (max 255 bytes)
  7499. Return: CF set on error
  7500.         AL = error code
  7501.         8Ch caller lacks privileges
  7502.         FEh not permitted to search directory
  7503.         FFh file not found
  7504.     CF clear if successful
  7505.         AL = 00h (success)
  7506.         CL = current extended file attributes (see #1138)
  7507. Note:    this function is supported by Advanced NetWare 2.1+
  7508. SeeAlso: AX=4300h,AH=E3h/SF=0Fh
  7509.  
  7510. Bitfields for NetWare extended file attributes:
  7511. Bit(s)    Description    (Table 1138)
  7512.  2-0    search mode (executables only)
  7513.     000 none (use shell's default search)
  7514.     001 search on all opens without path
  7515.     010 do not search
  7516.     011 search on read-only opens without path
  7517.     100 reserved
  7518.     101 search on all opens
  7519.     110 reserved
  7520.     111 search on all read-only opens
  7521.  3    reserved
  7522.  4    transactions on file tracked
  7523.  5    file's FAT indexed
  7524.  6    read audit (to be implemented)
  7525.  7    write audit (to be implemented)
  7526. --------N-21B7-------------------------------
  7527. INT 21 U - Novell NetWare - "HoldFileModeSet" (obsolete)
  7528.     AH = B7h
  7529.     AL = new value for HoldFileFlag
  7530. Return: AL = previous value of HoldFileFlag
  7531. Note:    this function provided backward compatibility with a bug in early
  7532.       DOS versions and CP/M, but is no longer used or supported
  7533. --------I-21B8-------------------------------
  7534. INT 21 - Attachmate Extra! - DISABLE HOST BUFFER UPDATES
  7535.     AH = B8h
  7536.     AL = window number (1-4=host B-E)
  7537.     DL = 01h
  7538. Notes:    only valid in CUT mode
  7539.     next AID keystroke (eg Enter) enables host buffer updates
  7540. SeeAlso: AH=A4h
  7541. --------N-21B800-----------------------------
  7542. INT 21 - Novell NetWare - PRINT SERVICES - GET DEFAULT CAPTURE FLAGS
  7543.     AX = B800h
  7544.     CX = size of reply buffer (01h-3Fh)
  7545.     ES:BX -> reply buffer for capture flags table (see #1139)
  7546. Return: AL = status
  7547.         00h successful
  7548. Note:    this function is supported by Advanced NetWare 2.0+
  7549. SeeAlso: AX=B801h,AX=B802h,AH=DFh/DL=00h,AH=DFh/DL=04h
  7550.  
  7551. Format of NetWare capture flags table:
  7552. Offset    Size    Description    (Table 1139)
  7553.  00h    BYTE    status (used internally, should be set to 00h)
  7554.  01h    BYTE    print flags (see #1140)
  7555.  02h    BYTE    tab size (01h-12h, default 08h)
  7556.  03h    BYTE    printer number on server (00h-04h, default 00h)
  7557.  04h    BYTE    number of copies to print (00h-FFh, default 01h)
  7558.  05h    BYTE    form type required in printer (default 00h)
  7559.  06h    BYTE    reserved
  7560.  07h 13 BYTEs    text to be placed on banner page
  7561.  14h    BYTE    reserved
  7562.  15h    BYTE    default local printer (00h = LPT1)
  7563.  16h    WORD    (big-endian) timeout in clock ticks for flushing capture file
  7564.           on inactivity, or 0000h to disable timeout
  7565.  18h    BYTE    flush capture file on LPT close if nonzero
  7566.  19h    WORD    (big-endian) maximum lines per page
  7567.  1Bh    WORD    (big-endian) maximum characters per line
  7568.  1Dh 13 BYTEs    name of form required in printer
  7569.  2Ah    BYTE    LPT capture flag
  7570.         00h inactive, FFh LPT device is being captured
  7571.  2Bh    BYTE    file capture flag
  7572.         00h if no file specified, FFh if capturing to file
  7573.  2Ch    BYTE    timing out (00h if no timeout in effect, FFh if timeout counter
  7574.           running)
  7575.  2Dh    DWORD    (big-endian) address of printer setup string
  7576.  31h    DWORD    (big-endian) address of printer reset string
  7577.  35h    BYTE    target connection ID
  7578.  36h    BYTE    capture in progress if FFh
  7579.  37h    BYTE    job queued for printing if FFh
  7580.  38h    BYTE    print job valid if FFh
  7581.  39h    DWORD    bindery object ID of print queue if previous byte FFh
  7582.  3Dh    WORD    (big-endian) print job number (1-999)
  7583.  
  7584. Bitfields for NetWare print flags:
  7585. Bit(s)    Description    (Table 1140)
  7586.  2    print capture file if interrupted by loss of connection
  7587.  3    no automatic form feed after print job
  7588.  6    printing control sequences interpreted by print service
  7589.  7    print banner page before capture file
  7590. --------N-21B801-----------------------------
  7591. INT 21 - Novell NetWare - PRINT SERVICES - SET DEFAULT CAPTURE FLAGS
  7592.     AX = B801h
  7593.     CX = size of buffer (01h-3Fh)
  7594.     ES:BX -> buffer containing capture flags table (see #1139)
  7595. Return: AL = status
  7596.         00h successful
  7597. Note:    this function is supported by Advanced NetWare 2.0+
  7598. SeeAlso: AX=B800h,AX=B803h,AH=DFh/DL=00h,AH=DFh/DL=04h
  7599. --------N-21B802-----------------------------
  7600. INT 21 - Novell NetWare - PRINT SERVICES - GET SPECIFIC CAPTURE FLAGS
  7601.     AX = B802h
  7602.     CX = size of reply buffer (01h-3Fh)
  7603.     DH = LPT port (00h-02h)
  7604.     ES:BX -> reply buffer for capture flags table (see #1139)
  7605. Return: AL = status
  7606.         00h successful
  7607. Note:    this function is supported by Advanced NetWare 2.1+
  7608. SeeAlso: AX=B800h,AX=B803h,AH=DFh/DL=00h,AH=DFh/DL=04h
  7609. --------N-21B803-----------------------------
  7610. INT 21 - Novell NetWare - PRINT SERVICES - SET SPECIFIC CAPTURE FLAGS
  7611.     AX = B803h
  7612.     CX = size of buffer (01h-3Fh)
  7613.     DH = LPT port (00h-02h)
  7614.     ES:BX -> buffer containing capture flags table (see #1139)
  7615. Return: AL = status
  7616.         00h successful
  7617. Note:    this function is supported by Advanced NetWare 2.1+
  7618. SeeAlso: AX=B800h,AX=B803h,AH=DFh/DL=00h,AH=DFh/DL=04h
  7619. --------N-21B804-----------------------------
  7620. INT 21 - Novell NetWare - PRINT SERVICES - GET DEFAULT LOCAL PRINTER
  7621.     AX = B804h
  7622. Return: DH = default LPT port (00h-02h)
  7623. Note:    this function is supported by Advanced NetWare 2.1+
  7624. SeeAlso: AX=B800h,AX=B805h,AH=DFh/DL=00h
  7625. --------N-21B805-----------------------------
  7626. INT 21 - Novell NetWare - PRINT SERVICES - SET DEFAULT LOCAL PRINTER
  7627.     AX = B805h
  7628.     DH = new default LPT port (00h-02h)
  7629. Return: AL = status
  7630.         00h successful
  7631. Note:    this function is supported by Advanced NetWare 2.1+
  7632. SeeAlso: AX=B800h,AX=B804h,AH=DFh/DL=00h
  7633. --------N-21B806-----------------------------
  7634. INT 21 - Novell NetWare - PRINT SERVICES - SET CAPTURE PRINT QUEUE
  7635.     AX = B806h
  7636.     DH = LPT port (00h-02h)
  7637.     BX:CX = print queue's object ID
  7638. Return: AL = status
  7639.         00h successful
  7640.         FFh job already set
  7641. Desc:    specify the print queue on which a print job is to be placed the next
  7642.       time a capture is started on the given printer port
  7643. Note:    this function is supported by Advanced NetWare 2.1+
  7644. SeeAlso: AX=B801h,AX=B807h,AH=E0h/SF=09h
  7645. --------N-21B807-----------------------------
  7646. INT 21 - Novell NetWare - PRINT SERVICES - SET CAPTURE PRINT JOB
  7647.     AX = B807h
  7648.     DH = LPT port (00h-02h)
  7649.     BX = job number (see AH=E3h/SF=68h)
  7650.     SI:DI:CX = NetWare file handle (see AH=E3h/SF=68h)
  7651. Return: AL = status
  7652.         00h successful
  7653.         FFh job already queued
  7654. Desc:    specify the capture file and print job to be used for subsequent
  7655.       output to the given printer port
  7656. Note:    this function is supported by Advanced NetWare 2.1+
  7657. SeeAlso: AX=B801h,AX=B806h,AH=E0h/SF=09h,AH=E3h/SF=68h
  7658. --------N-21B808-----------------------------
  7659. INT 21 - Novell NetWare - PRINT SERVICES - GET BANNER USER NAME
  7660.     AX = B808h
  7661.     ES:BX -> 12-byte buffer for user name
  7662. Return: AL = status
  7663.         00h successful
  7664. Desc:    get the user name which is printed on the banner page
  7665. Notes:    this function is supported by Advanced NetWare 2.1+
  7666.     the default name is the login name of the user
  7667. SeeAlso: AX=B809h
  7668. --------N-21B809-----------------------------
  7669. INT 21 - Novell NetWare - PRINT SERVICES - SET BANNER USER NAME
  7670.     AX = B809h
  7671.     ES:BX -> 12-byte buffer containing user name
  7672. Return: AL = status
  7673.         00h successful
  7674. Desc:    specify the user name which is printed on the banner page
  7675. Notes:    this function is supported by Advanced NetWare 2.1+
  7676.     the default name is the login name of the user
  7677. SeeAlso: AX=B808h
  7678. --------N-21B9-------------------------------
  7679. INT 21 U - Novell NetWare - "SpecialAttachableFunction"
  7680.     AH = B9h
  7681.     AL = FFh to hook this function
  7682.         ES:BX -> function to invoke on AH=B9h when AL<>FFh
  7683. Note:    this function is no longer used or supported by current versions of
  7684.       NetWare
  7685. --------v-21B974-----------------------------
  7686. INT 21 - VIRUS - "Tracker" - INSTALLATION CHECK
  7687.     AX = B974h
  7688. Return: AX = 2888h if resident
  7689. SeeAlso: AH=B3h"VIRUS",AH=D0h"VIRUS"
  7690. --------N-21BA-------------------------------
  7691. INT 21 U - Novell NetWare - "ReturnCommandComPointers"
  7692.     AH = BAh
  7693. Return: DX = environment segment
  7694.     ES:DI -> COMMAND.COM drive
  7695. Desc:    used to edit the COMSPEC and PATH variables in the master environment
  7696.       when mapping network drives
  7697. Note:    this function was documented in older Novell documents which are no
  7698.       longer available
  7699. --------N-21BB-------------------------------
  7700. INT 21 - Novell NetWare - WORKSTATION - SET END OF JOB STATUS
  7701.     AH = BBh
  7702.     AL = new EOJ flag
  7703.         00h disable EOJs
  7704.         01h enable EOJs
  7705. Return: AL = old EOJ flag
  7706. Desc:    specify whether the network shell should automatically generate an
  7707.       End of Job call when the root command processor regains control
  7708. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  7709.       Alloy NTNX
  7710. SeeAlso: AH=19h,AH=D6h
  7711. --------v-21BBBB-----------------------------
  7712. INT 21 - VIRUS - "Hey You" - INSTALLATION CHECK
  7713.     AX = BBBBh
  7714. Return: AX = 6969h
  7715. SeeAlso: AH=ABh"VIRUS",AH=BEh"VIRUS"
  7716. --------N-21BC-------------------------------
  7717. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - LOG PHYSICAL RECORD
  7718.     AH = BCh
  7719.     AL = flags (see #1142)
  7720.     BX = file handle
  7721.     CX:DX = starting offset in file
  7722.     SI:DI = length of region to lock
  7723.     BP = timeout in timer ticks (1/18 sec)
  7724.         0000h = don't wait if already locked
  7725. Return: AL = status (see #1141)
  7726. Desc:    add the specified physical record to the log table, optionally locking
  7727.       it
  7728. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  7729.       Alloy NTNX
  7730. SeeAlso: AH=5Ch,AH=BDh,AH=BEh,AH=BFh,AH=C2h,AH=D0h
  7731.  
  7732. (Table 1141)
  7733. Values for NetWare status:
  7734.  00h    successful
  7735.  96h    no dynamic memory for file
  7736.  FEh    timed out
  7737.  FFh    failed
  7738.  
  7739. Bitfields for NetWare flags:
  7740. Bit(s)    Description    (Table 1142)
  7741.  0    lock as well as log record
  7742.  1    non-exclusive lock
  7743. --------N-21BD-------------------------------
  7744. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - RELEASE PHYSICAL RECORD
  7745.     AH = BDh
  7746.     BX = file handle
  7747.     CX:DX = starting offset in file
  7748.     SI:DI = length of record
  7749. Return: AL = status
  7750.         00h successful
  7751.         FFh record not locked
  7752. Desc:    unlock the specified physical record but do not remove it from log
  7753.       table
  7754. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  7755.       Alloy NTNX
  7756. SeeAlso: AH=BCh,AH=BEh"NetWare",AH=C0h,AH=C3h,AH=D2h
  7757. --------N-21BE-------------------------------
  7758. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLEAR PHYSICAL RECORD
  7759.     AH = BEh
  7760.     BX = file handle
  7761.     CX:DX = starting offset within file
  7762.     SI:DI = record length in bytes
  7763. Return: AL = status
  7764.         00h successful
  7765.         FFh specified record not locked
  7766. Desc:    unlock the physical record and remove it from the log table
  7767. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  7768.       Alloy NTNX
  7769. SeeAlso: AH=5Ch,AH=BCh,AH=BDh,AH=C1h,AH=C4h,AH=D4h
  7770. --------v-21BE-------------------------------
  7771. INT 21 - VIRUS - "Datalock" - INSTALLATION CHECK
  7772.     AH = BEh
  7773. Return: AX = 1234h if resident
  7774. SeeAlso: AX=BBBBh,AX=BE00h
  7775. --------v-21BE00-----------------------------
  7776. INT 21 - VIRUS - "USSR-1049" - INSTALLATION CHECK
  7777.     AX = BE00h
  7778.     CF set
  7779. Return: CF clear if resident
  7780. SeeAlso: AH=BEh"VIRUS",AH=C0h"VIRUS"
  7781. --------N-21BF-------------------------------
  7782. INT 21 O - Novell NetWare, Alloy NTNX - LOG/LOCK RECORD (FCB)
  7783.     AH = BFh
  7784.     AL = flags (see #1142)
  7785.     DS:DX -> opened FCB (see #0693 at AH=0Fh)
  7786.     BX:CX = offset
  7787.     BP = lock timeout in timer ticks (1/18 sec) if AL nonzero
  7788.     SI:DI = length
  7789. Return: AL = error code (see #1141)
  7790. Note:    this function was added in NetWare 4.6, but was removed some time prior
  7791.       to Advanced NetWare 2.15, and is no longer listed in current Novell
  7792.       documentation
  7793. SeeAlso: AH=BCh,AH=C0h"NetWare",AH=C2h"NetWare"
  7794. --------N-21C0-------------------------------
  7795. INT 21 O - Novell NetWare, Alloy NTNX - RELEASE RECORD (FCB)
  7796.     AH = C0h
  7797.     DS:DX -> non-extended FCB (see #0693 at AH=0Fh)
  7798.     BX:CX = offset
  7799. Return: AL = error code (see #1141)
  7800. Notes:    unlocks record but does not remove it from log table
  7801.     this function was added in NetWare 4.6, but was removed some time prior
  7802.       to Advanced NetWare 2.15, and is no longer listed in current Novell
  7803.       documentation
  7804. SeeAlso: AH=BDh,AH=BFh,AH=C1h"NetWare",AH=C3h
  7805. --------v-21C0-------------------------------
  7806. INT 21 - VIRUS - "Slow"/"Zerotime", "Solano" - INSTALLATION CHECK
  7807.     AH = C0h
  7808. Return: AX = 0300h if "Slow"/"Zerotime" resident
  7809.     AX = 1234h if "Solano" resident
  7810. SeeAlso: AX=BE00h,AX=C000h"VIRUS",AX=C301h"VIRUS"
  7811. --------v-21C000-----------------------------
  7812. INT 21 - VIRUS - "QUICKY" - INSTALLATION CHECK
  7813.     AX = C000h
  7814.     BX = most files infected by any other infected file
  7815. Return: AX = 76F3h if resident
  7816. SeeAlso: AH=C0h"VIRUS",AX=C001h,AX=C002h,AH=C1h"VIRUS"
  7817. --------v-21C001-----------------------------
  7818. INT 21 - VIRUS - "QUICKY" - TURN INFECTION OFF
  7819.     AX = C001h
  7820. Return: nothing
  7821. Note:    if the virus is already memory resident this call disables any
  7822.       further infections
  7823. SeeAlso: AX=C000h,AX=C002h
  7824. --------v-21C002-----------------------------
  7825. INT 21 - VIRUS - "QUICKY" - TURN INFECTION ON
  7826.     AX = C002h
  7827. Return: nothing
  7828. Note:    if the virus is already memory resident and infection is disabled,
  7829.       this call re-enables it
  7830. SeeAlso: AX=C000h,AX=C001h
  7831. --------N-21C1-------------------------------
  7832. INT 21 O - Novell NetWare, Alloy NTNX - CLEAR RECORD (FCB)
  7833.     AH = C1h
  7834.     DS:DX -> opened FCB (see #0693 at AH=0Fh)
  7835.     BX:CX = offset
  7836. Return: AL = error code (see #1141)
  7837. Note:    unlocks record and removes it from log table
  7838.     this function was added in NetWare 4.6, but was removed some time prior
  7839.       to Advanced NetWare, and is no longer listed in current Novell
  7840.       documentation
  7841. SeeAlso: AH=BEh,AH=C0h"NetWare",AH=C4h
  7842. --------v-21C1-------------------------------
  7843. INT 21 - VIRUS - "Solano" - ???
  7844.     AH = C1h
  7845.     ???
  7846. Return: ???
  7847. SeeAlso: AH=C0h"VIRUS"
  7848. --------N-21C2-------------------------------
  7849. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - LOCK PHYSICAL RECORD SET
  7850.     AH = C2h
  7851.     AL = flags
  7852.         bit 1: non-exclusive lock
  7853.     BP = lock timeout in timer ticks (1/18 sec) 0000h = no wait
  7854. Return: AL = status
  7855.         00h successful
  7856.         FEh timed out
  7857.         FFh failed
  7858. Desc:    attempt to lock all physical records listed in the log table
  7859. Notes:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  7860.       Alloy NTNX
  7861.     status FFh will be returned if one or more physical records have been
  7862.       exclusively locked by another process
  7863. SeeAlso: AH=BFh,AH=C3h,AH=D1h
  7864. --------v-21C2-------------------------------
  7865. INT 21 - VIRUS - "Scott's Valley" - ???
  7866.     AH = C2h
  7867.     ???
  7868. Return: ???
  7869. SeeAlso: AH=C0h"VIRUS"
  7870. --------N-21C3-------------------------------
  7871. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - RELEASE PHYS RECORD SET
  7872.     AH = C3h
  7873. Desc:    unlock all currently-locked physical records in the log table, but do
  7874.       not remove them from the table
  7875. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  7876.       Alloy NTNX
  7877. SeeAlso: AH=BDh,AH=C0h,AH=C2h"NetWare",AH=C4h,AH=D3h
  7878. --------v-21C301DXF1F1-----------------------
  7879. INT 21 - VIRUS - "905"/"Backfont" - INSTALLATION CHECK
  7880.     AX = C301h
  7881.     DX = F1F1h
  7882. Return: DX = 0E0Eh if resident
  7883. SeeAlso: AH=C0h"VIRUS",AX=C500h"VIRUS"
  7884. --------N-21C4-------------------------------
  7885. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLEAR PHYSICAL RECORD SET
  7886.     AH = C4h
  7887. Desc:    unlock all physical records in the log table and remove them from the
  7888.       log table
  7889. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  7890.       Alloy NTNX
  7891. SeeAlso: AH=BEh,AH=C1h,AH=D5h
  7892. --------N-21C500-----------------------------
  7893. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - OPEN SEMAPHORE
  7894.     AX = C500h
  7895.     DS:DX -> semaphore name (counted string, max 127 bytes)
  7896.     CL = initial value for semaphore
  7897. Return: AL = status
  7898.         00h successful
  7899.         BL = number of processes having semaphore open
  7900.         CX:DX = semaphore handle
  7901.         03h name length greater than 127
  7902.         (refer to Novell document FYI.A.4611)
  7903.         FEh invalid name length
  7904.         FFh invalid semaphore value
  7905. Notes:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  7906.       Alloy NTNX
  7907.     the semaphore's value is incremented by AX=C503h and decremented by
  7908.       AX=C502h
  7909. SeeAlso: AX=C501h,AX=C502h,AX=C503h,AX=C504h,AX=F220h/SF=00h
  7910. --------v-21C500-----------------------------
  7911. INT 21 - VIRUS - "Sverdlov" - INSTALLATION CHECK
  7912.     AX = C500h
  7913. Return: AX = 6731h if resident
  7914. SeeAlso: AX=C301h"VIRUS",AH=C6h"VIRUS"
  7915. --------N-21C501-----------------------------
  7916. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - EXAMINE SEMAPHORE
  7917.     AX = C501h
  7918.     CX:DX = semaphore handle
  7919. Return: AL = status
  7920.         00h successful
  7921.         CX = semaphore value (-127 to 127)
  7922.         DL = count of processes which have the semaphore open
  7923.         FFh invalid handle
  7924. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  7925.       Alloy NTNX
  7926. SeeAlso: AX=C500h"NetWare",AX=C502h,AX=C504h,AX=F220h/SF=01h
  7927. --------N-21C502-----------------------------
  7928. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - WAIT ON SEMAPHORE
  7929.     AX = C502h
  7930.     CX:DX = semaphore handle
  7931.     BP = timeout limit in timer ticks (1/18 sec)
  7932.         0000h return immediately if semaphore already zero or negative
  7933. Return: AL = status
  7934.         00h successful
  7935.         FEh timeout
  7936.         FFh invalid handle
  7937. Desc:    decrement the semaphore's value, optionally waiting until its value
  7938.       becomes positive before decrementing
  7939. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  7940.       Alloy NTNX
  7941. SeeAlso: AX=C500h"NetWare",AX=C501h,AX=C503h,AX=F220h/SF=02h
  7942. --------N-21C503-----------------------------
  7943. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - SIGNAL SEMAPHORE
  7944.     AX = C503h
  7945.     CX:DX = semaphore handle
  7946. Return: AL = status
  7947.         00h successful
  7948.         01h semaphore value overflowed
  7949.         FFh invalid handle
  7950. Desc:    increment the semaphore's value and signal the first process (if any)
  7951.       in the queue waiting on the semaphore
  7952. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  7953.       Alloy NTNX
  7954. SeeAlso: AX=C500h"NetWare",AX=C502h,AX=F220h/SF=03h
  7955. --------N-21C504-----------------------------
  7956. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLOSE SEMAPHORE
  7957.     AX = C504h
  7958.     CX:DX = semaphore handle
  7959. Return: AL = status
  7960.         00h successful
  7961.         FFh invalid handle
  7962. Desc:    decrement the semaphore's open count, and delete the semaphore if the
  7963.       count reaches zero
  7964. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  7965.       Alloy NTNX
  7966. SeeAlso: AX=C500h"NetWare",AX=C501h,AX=F220h/SF=04h
  7967. --------N-21C6-------------------------------
  7968. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - GET OR SET LOCK MODE
  7969.     AH = C6h
  7970.     AL = subfunction
  7971.         00h set old "compatibility" mode (default)
  7972.         01h set new extended locks mode
  7973.         02h get lock mode
  7974. Return: AL = current lock mode
  7975. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  7976.       Alloy NTNX
  7977.     the locking mode should be 01h for NetWare 4.61+ and Advanced
  7978.       NetWare 1.0+ locking calls, and 00h for all older calls
  7979. SeeAlso: AH=BCh,AH=C4h,AH=D0h
  7980. --------v-21C6-------------------------------
  7981. INT 21 - VIRUS - "Socha" - INSTALLATION CHECK
  7982.     AH = C6h
  7983. Return: AL = 55h if resident
  7984. SeeAlso: AX=C500h"VIRUS",AX=C603h
  7985. --------v-21C603-----------------------------
  7986. INT 21 - VIRUS - "Yankee Doodle" or "MLTI" - INSTALLATION CHECK
  7987.     AX = C603h
  7988.     BX = version number (002Ch or 002Dh)
  7989.     CF set
  7990. Return: CF clear if resident
  7991.     ZF set if resident and input BX matches version
  7992. SeeAlso: AX=C500h"VIRUS",AX=C700h"VIRUS"
  7993. --------N-21C700-----------------------------
  7994. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - BEGIN TRANSACTION
  7995.     AX = C700h
  7996. Return: CF clear if successful
  7997.         AL = 00h
  7998.     CF set on error
  7999.         AL = error code
  8000.         96h out of memory
  8001.         FEh implicit transaction already active, converted to explicit
  8002.         FFh explicit transaction already active
  8003. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  8004. SeeAlso: AX=C701h,AX=C702h,AX=C703h,AX=F222h/SF=01h
  8005. --------v-21C700-----------------------------
  8006. INT 21 - VIRUS - "MH-757" - INSTALLATION CHECK
  8007.     AX = C700h
  8008. Return: AL = 07h if resident
  8009. SeeAlso: AX=C603h"VIRUS",AH=CBh"VIRUS"
  8010. --------N-21C701-----------------------------
  8011. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - END TRANSACTION
  8012.     AX = C701h
  8013. Return: AL = status (00h,FDh-FFh) (see #1143)
  8014.         00h successful
  8015.         CX:DX = transaction number
  8016.     CF clear except when AL=FFh
  8017. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  8018. SeeAlso: AX=C700h"NetWare",AX=C703h,AX=F222h/SF=02h
  8019.  
  8020. (Table 1143)
  8021. Values for NetWare TTS status:
  8022.  00h    successful
  8023.  FDh    transaction tracking disabled
  8024.  FEh    transaction ended records locked
  8025.  FFh    no explicit transaction active
  8026. --------N-21C702-----------------------------
  8027. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - INSTALLATION CHECK
  8028.     AX = C702h
  8029. Return: AL = status
  8030.         00h not available
  8031.         01h available
  8032.         FDh available but disabled
  8033. Desc:    determine whether the default file server supports TTS
  8034. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  8035. SeeAlso: AX=C700h,AX=C701h,AX=C703h,AX=F222h/SF=00h
  8036. --------N-21C703-----------------------------
  8037. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - ABORT TRANSACTION
  8038.     AX = C703h
  8039. Return: CF clear if successful
  8040.         AL = 00h
  8041.     CF set on error
  8042.         AL = error code (FDh-FFh) (see #1143)
  8043. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  8044. SeeAlso: AX=C700h"NetWare",AX=C701h,AX=C704h,AX=F222h/SF=03h
  8045. --------N-21C704-----------------------------
  8046. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - TRANSACTION STATUS
  8047.     AX = C704h
  8048.     CX:DX = transaction number (see AX=C701h)
  8049. Return: AL = status
  8050.         00h successful
  8051.         FFh not yet written to disk
  8052. Desc:    verify that a transaction has actually been written to disk
  8053. Notes:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  8054.     transactions are written to disk in the order in which they are ended,
  8055.       but it may take as much as five seconds for the data to be written
  8056. SeeAlso: AX=C700h"NetWare",AX=C701h,AX=C703h,AX=F222h/SF=04h
  8057. --------N-21C705-----------------------------
  8058. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - GET APPLICTN THRESHOLDS
  8059.     AX = C705h
  8060. Return: AL = status
  8061.         00h successful
  8062.     CL = maximum logical record locks (default 0)
  8063.     CH = maximum physical record locks (default 0)
  8064. Desc:    get the per-application limits on record locks allowed before an
  8065.       implicit transaction is begun
  8066. Notes:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  8067.     if either limit is FFh, implicit transactions are disabled for the
  8068.       corresponding lock type
  8069. SeeAlso: AX=C706h,AX=C707h,AX=F222h/SF=05h
  8070. --------N-21C706-----------------------------
  8071. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - SET APPLICTN THRESHOLDS
  8072.     AX = C706h
  8073.     CL = maximum logical record locks (default 0)
  8074.     CH = maximum physical record locks (default 0)
  8075. Return: AL = status
  8076.         00h successful
  8077. Desc:    specify the per-application limits on record locks allowed before an
  8078.       implicit transaction is begun
  8079. Notes:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  8080.     if either limit is set to FFh, implicit transactions are disabled for
  8081.       the corresponding lock type
  8082. SeeAlso: AX=C705h,AX=C708h,AX=F222h/SF=06h
  8083. --------N-21C707-----------------------------
  8084. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - GET WORKSTN THRESHOLDS
  8085.     AX = C707h
  8086. Return: AL = status
  8087.         00h successful
  8088.     CL = maximum logical record locks (default 0)
  8089.     CH = maximum physical record locks (default 0)
  8090. Desc:    get the per-workstation limits on record locks allowed before an
  8091.       implicit transaction is begun
  8092. Notes:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  8093.     if either limit is FFh, implicit transactions are disabled for the
  8094.       corresponding lock type
  8095. SeeAlso: AX=C705h,AX=C708h,AX=F222h/SF=07h
  8096. --------N-21C708-----------------------------
  8097. INT 21 - Novell NetWare - TRANSACTION TRACKING SYSTEM - SET WORKSTN THRESHOLDS
  8098.     AX = C708h
  8099.     CL = maximum logical record locks (default 0)
  8100.     CH = maximum physical record locks (default 0)
  8101. Return: AL = status
  8102.         00h successful
  8103. Desc:    specify the per-workstation limits on record locks allowed before an
  8104.       implicit transaction is begun
  8105. Notes:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  8106.     if either limit is set to FFh, implicit transactions are disabled for
  8107.       the corresponding lock type
  8108. SeeAlso: AX=C706h,AX=C707h,AX=F222h/SF=08h
  8109. --------N-21C8-------------------------------
  8110. INT 21 O - Novell NetWare - BEGIN LOGICAL FILE LOCKING
  8111.     AH = C8h
  8112.     if function C6h lock mode 00h:
  8113.         DL = mode
  8114.         00h no wait
  8115.         01h wait
  8116.     if function C6h lock mode 01h:
  8117.         BP = timeout in timer ticks (1/18 sec)
  8118. Return: AL = error code
  8119. Desc:    used to provide TTS support for applications which are not aware of
  8120.       Novell's Transaction Tracking System
  8121. Note:    this function was added in NetWare 4.0, but was removed some time prior
  8122.       to Advanced NetWare 2.15, and is no longer listed in current Novell
  8123.       documentation
  8124. SeeAlso: AH=C9h
  8125. --------N-21C9-------------------------------
  8126. INT 21 O - Novell NetWare - END LOGICAL FILE LOCKING
  8127.     AH = C9h
  8128. Return: AL = error code
  8129. Desc:    used to provide TTS support for applications which are not aware of
  8130.       Novell's Transaction Tracking System
  8131. Note:    this function was added in NetWare 4.0, but was removed some time prior
  8132.       to Advanced NetWare 2.15, and is no longer listed in current Novell
  8133.       documentation
  8134. SeeAlso: AH=C8h
  8135. --------N-21CA-------------------------------
  8136. INT 21 O - Novell NetWare, Alloy NTNX - LOG/LOCK PERSONAL FILE (FCB)
  8137.     AH = CAh
  8138.     DS:DX -> FCB (see #0693 at AH=0Fh)
  8139.     if function C6h lock mode 01h:
  8140.         AL = log and lock flag
  8141.         00h log file only
  8142.         01h lock as well as log file
  8143.         BP = lock timeout in timer ticks (1/18 sec)
  8144. Return: AL = error code
  8145.         00h successful
  8146.         96h no dynamic memory for file
  8147.         FEh timeout
  8148.         FFh failed
  8149. Desc:    provides file locking support for FCBs
  8150. Note:    this function was added in NetWare 4.0, but was removed some time prior
  8151.       to Advanced NetWare 2.15, and is no longer listed in current Novell
  8152.       documentation
  8153. SeeAlso: AH=CBh
  8154. --------v-21CA15-----------------------------
  8155. INT 21 - VIRUS - "Piter" - ???
  8156.     AX = CA15h
  8157.     ???
  8158. Return: ???
  8159. SeeAlso: AH=CCh"VIRUS"
  8160. --------N-21CB-------------------------------
  8161. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - LOCK FILE SET
  8162.     AH = CBh
  8163.     if function C6h lock mode 00h:
  8164.         DL = mode (00h no wait, 01h wait)
  8165.     if function C6h lock mode 01h:
  8166.         BP = lock timeout in timer ticks (1/18 sec), 0000h = no wait
  8167. Return: AL = status (00h,FEh,FFh) (see #1144)
  8168. Desc:    attempt to lock all files listed in the log table
  8169. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  8170.       Alloy NTNX
  8171.     status FFh will be returned if one or more of the files have already
  8172.       been exclusively locked by another process
  8173. SeeAlso: AH=CAh,AH=CDh,AH=D1h,AH=EBh
  8174.  
  8175. (Table 1144)
  8176. Values for NetWare status:
  8177.  00h    successful
  8178.  FEh    timed out
  8179.  FFh    failed
  8180. --------v-21CB-------------------------------
  8181. INT 21 - VIRUS - "Milous" - INSTALLATION CHECK
  8182.     AH = CBh
  8183. Return: AL = 07h if resident
  8184. SeeAlso: AX=C700h"VIRUS",AX=CB02h
  8185. --------v-21CB02-----------------------------
  8186. INT 21 - VIRUS - "Witcode" - INSTALLATION CHECK
  8187.     AX = CB02h
  8188. Return: AX = 02CBh if resident
  8189. SeeAlso: AH=CBh"VIRUS",AH=CCh"VIRUS"
  8190. --------N-21CC-------------------------------
  8191. INT 21 O - Novell NetWare, Alloy NTNX - RELEASE FILE (FCB)
  8192.     AH = CCh
  8193.     DS:DX -> FCB (see #0693 at AH=0Fh)
  8194. Return: none
  8195. Desc:    unlocks file, but does not remove it from the log table or close it
  8196. Note:    this function was added in NetWare 4.0, but was removed some time prior
  8197.       to Advanced NetWare 2.15, and is no longer listed in current Novell
  8198.       documentation
  8199. SeeAlso: AH=CAh,AH=CDh
  8200. --------v-21CC-------------------------------
  8201. INT 21 - VIRUS - "Westwood" - INSTALLATION CHECK
  8202.     AH = CCh
  8203. Return: AX = 0700h if resident
  8204. SeeAlso: AX=CB02h,AH=CDh"VIRUS",AX=D000h"VIRUS"
  8205. --------N-21CD-------------------------------
  8206. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - RELEASE FILE SET
  8207.     AH = CDh
  8208. Return: none
  8209. Desc:    unlock all files listed in the log table, but don't remove them from
  8210.       the table
  8211. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  8212.       Alloy NTNX
  8213. SeeAlso: AH=CBh,AH=CCh,AH=CFh,AH=D3h
  8214. --------v-21CD-------------------------------
  8215. INT 21 - VIRUS - "Westwood" - ???
  8216.     AH = CDh
  8217.     ???
  8218. Return: ???
  8219. SeeAlso: AH=CCh"VIRUS"
  8220. --------N-21CE-------------------------------
  8221. INT 21 O - Novell NetWare, Alloy NTNX - CLEAR FILE (FCB)
  8222.     AH = CEh
  8223.     DS:DX -> FCB (see #0693 at AH=0Fh)
  8224. Return: AL = error code
  8225. Desc:    unlocks file and removes it from log table, then closes all opened and
  8226.       logged occurrences
  8227. Note:    this function was added in NetWare 4.0, but was removed some time prior
  8228.       to Advanced NetWare 2.15, and is no longer listed in current Novell
  8229.       documentation
  8230. SeeAlso: AH=CAh,AH=CFh,AH=EDh"NetWare"
  8231. --------N-21CF-------------------------------
  8232. INT 21 - LANstep - ???
  8233.     AH = CFh
  8234.     ???
  8235. Return: ???
  8236. Program: LANstep is a redesign of the Waterloo Microsystems PORT network
  8237. --------N-21CF-------------------------------
  8238. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLEAR FILE SET
  8239.     AH = CFh
  8240. Return: AL = 00h
  8241. Desc:    unlock and remove all files from log table
  8242. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  8243.       Alloy NTNX
  8244. SeeAlso: AH=CAh,AH=CEh,AH=EBh"NetWare"
  8245. --------N-21D0-------------------------------
  8246. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - LOG LOGICAL RECORD
  8247.     AH = D0h
  8248.     DS:DX -> record string (counted string, max 99 data bytes)
  8249.     if function C6h lock mode 01h: (Novell, NTNX only)
  8250.         AL = flags
  8251.         bit 0: lock as well as log the record
  8252.         bit 1: non-exclusive lock
  8253.         BP = lock timeout in timer ticks (1/18 sec)
  8254. Return: AL = status
  8255.         00h successful
  8256.         96h no dynamic memory for file
  8257.         FEh timed out
  8258.         FFh unsuccessful
  8259. Desc:    add the specified logical record name to the log table, and optionally
  8260.       lock the record
  8261. Notes:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+,
  8262.       Banyan VINES, and Alloy NTNX
  8263.     locks on logical record names are advisory and may be ignored by other
  8264.       applications
  8265. SeeAlso: AH=BCh,AH=D1h,AH=D2h,AH=D4h,AH=EBh
  8266. --------v-21D0-------------------------------
  8267. INT 21 - VIRUS - "MALAGA" - INSTALLATION CHECK
  8268.     AH = D0h
  8269. Return: AX = 00D0h if resident
  8270. SeeAlso: AH=B3h"VIRUS",AH=D0h"ANTIARJ",AX=D000h"VIRUS"
  8271. --------v-21D0-----------------------------
  8272. INT 21 - VIRUS - "ANTIARJ" -INSTALLATION CHECK
  8273.     AH = D0h
  8274. Return: AH = D1h if resident
  8275. SeeAlso: AH=D0h"MALAGA"
  8276. --------v-21D000-----------------------------
  8277. INT 21 - VIRUS - "Fellowship" - INSTALLATION CHECK
  8278.     AX = D000h
  8279. Return: BX = 1234h if resident
  8280. SeeAlso: AH=CCh"VIRUS",AH=D0h"ANTIARJ",AX=D000h"Warlock",AH=D5h"VIRUS",AX=D5AAh
  8281. --------v-21D000-----------------------------
  8282. INT 21 - VIRUS - "Warlock" - INSTALLATION CHECK
  8283.     AX = D000h
  8284.     CF clear
  8285. Return: CF set if resident (normal DOS return would be CF clear)
  8286. SeeAlso: AX=D000h"VIRUS",AH=D5h"VIRUS"
  8287. --------N-21D1-------------------------------
  8288. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - LOCK LOGICAL RECORD SET
  8289.     AH = D1h
  8290.     AL = lock type (00h exclusive, 01h shareable)
  8291.     if function C6h lock mode 00h:
  8292.         DL = mode (00h no wait, 01h wait)
  8293.     if function C6h lock mode 01h: (Novell only)
  8294.         BP = lock timeout in timer ticks (1/18 sec), 0000h no wait
  8295. Return: AL = status (see #1144)
  8296. Desc:    attempt to lock all logical record names listed in the log table
  8297. Notes:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+,
  8298.       Banyan VINES, and Alloy NTNX
  8299.     status FFh will be returned if one or more logical records have been
  8300.       exclusively locked by another process
  8301.     locks on logical record names are advisory and may be ignored by other
  8302.       applications
  8303. SeeAlso: AH=C2h,AH=CBh,AH=D0h,AH=D3h,AH=D5h
  8304. --------N-21D2-------------------------------
  8305. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - RELEASE LOGICAL RECORD
  8306.     AH = D2h
  8307.     DS:DX -> semaphore identifier (counted string up to 99 chars long)
  8308. Return: AL = status
  8309.         00h successful
  8310.         FFh no such record
  8311. Desc:    unlock the logical record name but do not remove it from the log table
  8312. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+,
  8313.       Banyan VINES, and Alloy NTNX
  8314.     locks on logical record names are advisory and may be ignored by other
  8315.       applications
  8316. SeeAlso: AH=BDh,AH=D0h,AH=D3h,AH=D4h
  8317. --------v-21D2-------------------------------
  8318. INT 21 - VIRUS???
  8319.     AH = D2h
  8320.     ???
  8321. Return: ???
  8322. Note:    this call is intercepted by the Search&Destroy SDRes v27.03 bundled
  8323.       with Novell DOS 7, and is presumably some virus's installation check
  8324. SeeAlso: AH=4Ah/BX=00B6h
  8325. --------N-21D3-------------------------------
  8326. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - RELEASE LOGICAL RECORD SET
  8327.     AH = D3h
  8328. Desc:    unlock all currently-locked logical record names in the log table, but
  8329.       do not remove them from the table
  8330. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+,
  8331.       Banyan VINES, and Alloy NTNX
  8332.     locks on logical record names are advisory and may be ignored by other
  8333.       applications
  8334. SeeAlso: AH=C3h,AH=CDh,AH=D1h,AH=D2h,AH=D5h
  8335. --------N-21D4-------------------------------
  8336. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLEAR LOGICAL RECORD
  8337.     AH = D4h
  8338.     DS:DX -> logical record name (counted string up to 99 chars long)
  8339. Return: AL = status (00h,FFh) (see #1145)
  8340. Desc:    unlock and remove the logical record name from the log table
  8341. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+,
  8342.       Banyan VINES, and Alloy NTNX
  8343.     locks on logical record names are advisory and may be ignored by other
  8344.       applications
  8345. SeeAlso: AH=BEh,AH=D0h,AH=D2h,AH=D5h
  8346.  
  8347. (Table 1145)
  8348. Values for NetWare status:
  8349.  00h    successful
  8350.  FFh    no such record name
  8351. --------N-21D5-------------------------------
  8352. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLEAR LOGICAL RECORD SET
  8353.     AH = D5h
  8354. Return: AL = error code (00h,FFh) (see #1145)
  8355. Desc:    unlock and remove all logical record name from the log table
  8356. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+,
  8357.       Banyan VINES, and Alloy NTNX
  8358.     locks on logical record names are advisory and may be ignored by other
  8359.       applications
  8360. SeeAlso: AH=D1h,AH=D3h,AH=D4h
  8361. --------v-21D5-------------------------------
  8362. INT 21 - VIRUS - "Carfield" - ???
  8363.     AH = D5h
  8364.     ???
  8365. Return: ???
  8366. SeeAlso: AX=D5AAh,AH=F3h"Carfield"
  8367. --------v-21D5AA-----------------------------
  8368. INT 21 - VIRUS - "Diamond-A", "Diamond-B" - INSTALLATION CHECK
  8369.     AX = D5AAh
  8370. Return: AX = 2A55h if "Diamond-A" resident
  8371.     AX = 2A03h if "Diamond-B"-family virus resident
  8372. SeeAlso: AX=D000h,AH=D5h"VIRUS",AX=D5AAh/BP=DEAAh
  8373. --------v-21D5AABPDEAA-----------------------
  8374. INT 21 - VIRUS - "Dir" - INSTALLATION CHECK
  8375.     AX = D5AAh
  8376.     BP = DEAAh
  8377. Return: SI = 4321h if resident
  8378. SeeAlso: AX=D5AAh,AX=DADAh"VIRUS"
  8379. --------N-21D6-------------------------------
  8380. INT 21 - Novell NetWare - WORKSTATION - END OF JOB
  8381.     AH = D6h
  8382.     BX = job flag (0000h current job, FFFFh all processes on workstation)
  8383. Return: AL = error code
  8384. Desc:    unlocks and clears all locked or logged files and records held by the
  8385.       process(es), closes all files, resets error and lock modes, and
  8386.       releases all network resources
  8387. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  8388.       Alloy NTNX
  8389. SeeAlso: AH=BBh"NetWare",AH=D7h
  8390. --------N-21D7-------------------------------
  8391. INT 21 - Novell NetWare - CONNECTION SERVICES - SYSTEM LOGOUT
  8392.     AH = D7h
  8393. Return: AL = error code
  8394. Desc:    this function closes the caller's open files, logs it out from all
  8395.       file servers, detaches the workstation from all non-default file
  8396.       servers, and maps a drive to the default server's SYS:LOGIN directory
  8397. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  8398.       Alloy NTNX
  8399. SeeAlso: AH=D6h,AH=E3h/SF=14h,AH=F1h"NetWare"
  8400. --------N-21D8-------------------------------
  8401. INT 21 - Novell NetWare, Banyan VINES - ALLOCATE RESOURCE
  8402.     AH = D8h
  8403.     DL = resource number
  8404. Return: AL = status (00h successful, FFh unsucessful)
  8405. Note:    this function is no longer used or supported by NetWare, and is not
  8406.       documented in Novell documents
  8407. SeeAlso: AH=D9h
  8408. --------N-21D9-------------------------------
  8409. INT 21 - Novell NetWare, Banyan VINES - DEALLOCATE RESOURCE
  8410.     AH = D9h
  8411.     DL = resource number
  8412. Return: AL = status (00h successful, FFh unsucessful)
  8413. Note:    this function is no longer used or supported by NetWare, and is not
  8414.       documented in Novell documents
  8415. SeeAlso: AH=D8h
  8416. --------N-21DA-------------------------------
  8417. INT 21 - Novell NetWare - DIRECTORY SERVICES - GET VOLUME INFO WITH NUMBER
  8418.     AH = DAh
  8419.     DL = volume number
  8420.     ES:DI -> reply buffer (see #1146)
  8421. Return: AL = 00h
  8422. Notes:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  8423.     operator console rights are not required to make this call
  8424.     reported total blocks and total unused blocks include the Hot Fix
  8425.       Table; the NetWare shell's implementation of INT 21/AH=36h will
  8426.       report values larger than 268MB as 268MB.
  8427. SeeAlso: AH=36h,AH=E2h/SF=15h,AH=E3h/SF=E9h
  8428.  
  8429. Format of NetWare reply buffer:
  8430. Offset    Size    Description    (Table 1146)
  8431.  00h    WORD    sectors/block
  8432.  02h    WORD    total blocks on volume
  8433.  04h    WORD    unused blocks
  8434.  06h    WORD    total directory entries
  8435.  08h    WORD    unused directory entries
  8436.  0Ah 16 BYTEs    volume name, null padded
  8437.  1Ah    WORD    removable flag, 0000h = not removable
  8438. Note:    all words are big-endian
  8439. --------v-21DADA-----------------------------
  8440. INT 21 - VIRUS - "Gotcha" - INSTALLATION CHECK
  8441.     AX = DADAh
  8442. Return: AH = A5h
  8443. SeeAlso: AX=D5AAh,AX=DAFEh"VIRUS"
  8444. --------v-21DAFE-----------------------------
  8445. INT 21 - VIRUS - "Plovdiv 1.3" - INSTALLATION CHECK
  8446.     AX = DAFEh
  8447. Return: AX = 1234h if resident
  8448. SeeAlso: AX=DADAh,AH=DDh"VIRUS",AH=DEh"VIRUS"
  8449. --------N-21DB-------------------------------
  8450. INT 21 - Novell NetWare - WORKSTATION - GET NUMBER OF LOCAL DRIVES
  8451.     AH = DBh
  8452. Return: AL = number of local disks as set by LASTDRIVE in CONFIG.SYS
  8453. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  8454.       Alloy NTNX
  8455. SeeAlso: AH=0Eh
  8456. --------N-21DC-------------------------------
  8457. INT 21 - Novell NetWare - CONNECTION SERVICES - GET CONNECTION NUMBER
  8458.     AH = DCh
  8459. Return: AL = logical connection number
  8460.         00h if NetWare not loaded or this machine is a non-dedicated server
  8461.     CX = station number in ASCII (CL = first digit)
  8462. Notes:    this function is supported by NetWare 4.0+, Banyan VINES, and Alloy
  8463.       NTNX
  8464.     station number only unique for those PCs connected to same semaphore
  8465.       service
  8466. SeeAlso: AH=F2h"NetWare"
  8467. --------d-21DC-------------------------------
  8468. INT 21 - PCMag PCMANAGE/DCOMPRES - TURN ON/OFF
  8469.     AH = DCh
  8470.     DX = state
  8471.         0000h turn on
  8472.         0001h turn off
  8473. SeeAlso: AX=FEDCh
  8474. --------v-21DC28-----------------------------
  8475. INT 21 - VIRUS - "Monika" - INSTALLATION CHECK
  8476.     AX = DC28h
  8477. Return: AX = 1973h if resident
  8478. SeeAlso: AX=D000h"VIRUS",AX=DCBAh"VIRUS"
  8479. --------v-21DCBA-----------------------------
  8480. INT 21 - VIRUS - "Red Spider" - INSTALLATION CHECK
  8481.     AX = DCBAh
  8482. Return: AX = ABCDh if resident
  8483. SeeAlso: AX=DC28h"VIRUS",AX=DEFEh"VIRUS"
  8484. --------N-21DD-------------------------------
  8485. INT 21 - Novell NetWare - WORKSTATION - SET NetWare ERROR MODE
  8486.     AH = DDh
  8487.     DL = error mode
  8488.         00h invoke INT 24 on critical I/O errors (default)
  8489.         01h return NetWare extended error code in AL
  8490.         02h return error code in AL, mapped to standard DOS error codes
  8491. Return: AL = previous error mode
  8492. Note:    this function is supported by Advanced NetWare 2.0+
  8493. SeeAlso: INT 24
  8494. --------v-21DD-------------------------------
  8495. INT 21 - VIRUS - "Jerusalem"-family - RELOCATE VIRUS???
  8496.     AH = DDh
  8497.     CX = number of bytes to copy
  8498.     DS:SI -> source of copy
  8499.     ES:DI -> destination of copy
  8500. Return: does not return normally; return address is caller's CS:0100h with
  8501.       AX = ???
  8502. SeeAlso: AX=DDEFh,AH=E0h"VIRUS",AH=EEh"VIRUS"
  8503. --------v-21DDEF------------------------
  8504. INT 21 - VIRUS- "GOLGI" - INSTALLATION CHECK
  8505.     AX = DDEFh
  8506. Return: AX = EFDDh if resident
  8507. SeeAlso: AH=DDh"VIRUS",AH=DEh"VIRUS"
  8508. --------v-21DE-------------------------------
  8509. INT 21 - VIRUS - "Durban" - INSTALLATION CHECK
  8510.     AH = DEh
  8511. Return: AH = DFh if resident
  8512. SeeAlso: AX=DAFEh,AX=DDEFh,AH=DEh"April 1st",AX=DEADh"90210"
  8513. --------v-21DE-------------------------------
  8514. INT 21 - VIRUS - "April 1st EXE" - ???
  8515.     AH = DEh
  8516.     ???
  8517. Return: ???
  8518. SeeAlso: AH=DEh"Durban",AX=DEADh"90210"
  8519. --------N-21DE-------------------------------
  8520. INT 21 - Novell NetWare - MESSAGE SERVICES - SET BROADCAST MODE
  8521.     AH = DEh
  8522.     DL = broadcast mode
  8523.         00h receive server and workstation broadcasts (default)
  8524.         01h receive server broadcasts, discard user messages
  8525.         02h store server broadcasts for retrieval
  8526.         03h store all broadcasts for retrieval
  8527. Return: AL = new broadcast mode
  8528. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  8529. --------N-21DE--DL04-------------------------
  8530. INT 21 - Novell NetWare - MESSAGE SERVICES - GET BROADCAST MODE
  8531.     AH = DEh
  8532.     DL = 04h
  8533. Return: AL = current broadcast mode
  8534.         00h receive server and workstation broadcasts (default)
  8535.         01h receive server broadcasts, discard user message
  8536.         02h store server broadcasts for retrieval
  8537.         03h store all broadcasts for retrieval
  8538. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  8539. --------N-21DE-------------------------------
  8540. INT 21 - Novell NetWare - SHELL TIMER INTERRUPT CHECKS
  8541.     AH = DEh
  8542.     DL = function
  8543.         05h disable shell timer interrupt checks
  8544.         06h enable shell timer interrupt checks
  8545. Return: ???
  8546. Note:    this function was added in NetWare 4.0, but is not listed in current
  8547.       Novell documentation and is probably no longer supported
  8548. --------v-21DEAD------------------------
  8549. INT 21 - VIRUS - "90210" - INSTALLATION CHECK
  8550.     AX = DEADh
  8551. Return: AX = AAAAh if resident
  8552. SeeAlso: AH=DEh"April 1st",AX=DEADh"Shifting",AX=DEDEh"VIRUS"
  8553. --------v-21DEAD------------------------
  8554. INT 21 - VIRUS - "Shifting Objective" - RELOCATE CODE ???
  8555.     AX = DEADh
  8556. SeeAlso: AX=FEADh
  8557. SeeAlso: AX=DEADh"90210",AX=DEDEh"VIRUS"
  8558. --------v-21DEDE-----------------------------
  8559. INT 21 - VIRUS - "Brothers" - INSTALLATION CHECK
  8560.     AX = DEDEh
  8561. Return: AH = 41h if resident
  8562. SeeAlso: AX=DEADh"Shifting",AX=DEFEh"VIRUS"
  8563. --------v-21DEFE-----------------------------
  8564. INT 21 - VIRUS - "Maze" - INSTALLATION CHECK
  8565.     AX = DEFEh
  8566. Return: AX = ABCDh if resident
  8567. SeeAlso: AX=DCBAh"VIRUS",AX=DEDEh"VIRUS",AH=E0h"VIRUS"
  8568. --------N-21DF--DL00-------------------------
  8569. INT 21 - Novell NetWare - PRINT SERVICES - START LPT CAPTURE
  8570.     AH = DFh
  8571.     DL = 00h
  8572. Return: AL = status
  8573.         00h successful
  8574. Desc:    this function redirects the default LPT to a capture file on the file
  8575.       server
  8576. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  8577.       Alloy NTNX; under NTNX, it sends a print break (see INT 17/AH=84h)
  8578.     a print job is queued when the first character of output is captured
  8579. SeeAlso: AX=B800h,AX=B804h,AH=DFh/DL=01h,AH=DFh/DL=02h,AH=DFh/DL=03h
  8580. SeeAlso: AH=DFh/DL=04h,AX=F003h
  8581. --------N-21DF--DL01-------------------------
  8582. INT 21 - Novell NetWare - PRINT SERVICES - END LPT CAPTURE
  8583.     AH = DFh
  8584.     DL = 01h
  8585. Return: AL = status
  8586.         00h successful
  8587. Desc:    stop redirecting the default LPT, close the capture file, and release
  8588.       the job in the print queue for printing
  8589. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  8590.       Alloy NTNX; under NTNX, it sends a print break (see INT 17/AH=84h)
  8591.     after this call, the default LPT defaults to local printing
  8592. SeeAlso: AH=DFh/DL=00h,AH=DFh/DL=02h,AH=DFh/DL=03h,AH=DFh/DL=05h
  8593. --------N-21DF--DL02-------------------------
  8594. INT 21 - Novell NetWare - PRINT SERVICES - CANCEL LPT CAPTURE
  8595.     AH = DFh
  8596.     DL = 02h
  8597. Return: AL = status
  8598.         00h successful
  8599. Desc:    this function ends the capture of the default LPT, removes the job from
  8600.       the print queue, and deletes the capture file unless it is a
  8601.       permanent capture file
  8602. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  8603.       Alloy NTNX; under NTNX, it sends a print break (see INT 17/AH=84h)
  8604.     after this call, the default LPT defaults to local printing
  8605. SeeAlso: AH=DFh/DL=00h,AH=DFh/DL=06h
  8606. --------N-21DF--DL03-------------------------
  8607. INT 21 - Novell NetWare - PRINT SERVICES - FLUSH LPT CAPTURE
  8608.     AH = DFh
  8609.     DL = 03h
  8610. Return: AL = status
  8611.         00h successful
  8612. Desc:    this function closes the current capture file for the default LPT
  8613.       and starts printing it if it is not a permanent capture file
  8614. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  8615.       Alloy NTNX; under NTNX, it sends a print break (see INT 17/AH=84h)
  8616.     if more data is sent to the LPT port after this call, a new capture
  8617.       file will be opeend
  8618. SeeAlso: AH=DFh/DL=00h,AH=DFh/DL=01h,AH=DFh/DL=02h,AH=DFh/DL=07h
  8619. --------N-21DF--DL04-------------------------
  8620. INT 21 - Novell NetWare - PRINT SERVICES - START SPECIFIC LPT CAPTURE
  8621.     AH = DFh
  8622.     DL = 04h
  8623.     DH = LPT port (00h-02h)
  8624. Return: AL = status
  8625.         00h successful
  8626. Desc:    this function redirects the specified LPT to a capture file on the file
  8627.       server
  8628. Notes:    this function is supported by Advanced NetWare 2.1+
  8629.     a print job is queued when the first character of output is captured
  8630. SeeAlso: AX=B800h,AH=DFh/DL=00h,AH=DFh/DL=05h,AH=DFh/DL=06h,AH=DFh/DL=07h
  8631. SeeAlso: AX=F003h
  8632. --------N-21DF--DL05-------------------------
  8633. INT 21 - Novell NetWare - PRINT SERVICES - END SPECIFIC LPT CAPTURE
  8634.     AH = DFh
  8635.     DL = 05h
  8636.     DH = LPT port (00h-02h)
  8637. Return: AL = status
  8638.         00h successful
  8639. Desc:    stop redirecting the specified LPT, close the capture file, and release
  8640.       the job in the print queue for printing
  8641. Notes:    this function is supported by Advanced NetWare 2.1+
  8642.     after this call, the specified LPT defaults to local printing
  8643. SeeAlso: AH=DFh/DL=01h,AH=DFh/DL=04h,AH=DFh/DL=06h,AH=DFh/DL=07h
  8644. --------N-21DF--DL06-------------------------
  8645. INT 21 - Novell NetWare - PRINT SERVICES - CANCEL SPECIFIC LPT CAPTURE
  8646.     AH = DFh
  8647.     DL = 06h
  8648.     DH = LPT port (00h-02h)
  8649. Return: AL = status
  8650.         00h successful
  8651. Desc:    this function ends the capture of the specified LPT, removes the job
  8652.       from the print queue, and deletes the capture file unless it is a
  8653.       permanent capture file
  8654. Notes:    this function is supported by Advanced NetWare 2.1+
  8655.     after this call, the specified LPT defaults to local printing
  8656. SeeAlso: AH=DFh/DL=02h,AH=DFh/DL=04h,AH=DFh/DL=05h,AH=DFh/DL=07h
  8657. --------N-21DF--DL07-------------------------
  8658. INT 21 - Novell NetWare - PRINT SERVICES - FLUSH SPECIFIC LPT CAPTURE
  8659.     AH = DFh
  8660.     DL = 07h
  8661.     DH = LPT port (00h-02h)
  8662. Return: AL = status
  8663.         00h successful
  8664. Desc:    this function closes the current capture file for the specified LPT
  8665.       and starts printing it if it is not a permanent capture file
  8666. Notes:    this function is supported by Advanced NetWare 2.1+
  8667.     if more data is sent to the LPT port after this call, a new capture
  8668.       file will be opeend
  8669. SeeAlso: AH=DFh/DL=03h,AH=DFh/DL=04h,AH=DFh/DL=05h,AH=DFh/DL=06h
  8670. --------T-21DF00DX534C-----------------------
  8671. INT 21 U - Software Carousel - INSTALLATION CHECK
  8672.     AX = DF00h
  8673.     DX = 534Ch ("SL")
  8674.     DI = 534Ch ("SL")
  8675. Return: AX = 00FFh if installed
  8676.         ???
  8677. Program: Software Carousel is a task switcher by SoftLogic Solutions, Inc.
  8678. --------T-21DF01-----------------------------
  8679. INT 21 - Software Carousel - SWITCH TO ANOTHER TASK
  8680.     AX = DF01h
  8681.     BL = task number (00h = next task)
  8682. Return: AL = status
  8683.         00h Carousel not running
  8684.         01h successful
  8685.         FFh unsucessful
  8686.         AH = error code (01h,02h) (see #1147)
  8687.  
  8688. (Table 1147)
  8689. Values for Software Carousel error code:
  8690.  00h    invalid subfunction in AL
  8691.  01h    invalid task number
  8692.  02h    tried to switch to task with no memory size
  8693.  03h    tried to kill program in partition with no program running
  8694.  04h    tried to change size of an active memory partition
  8695.  05h    invalid memory size
  8696.  06h    tried to send command to task with a pending previous command
  8697. --------T-21DF02-----------------------------
  8698. INT 21 - Software Carousel - KILL PROGRAM IN MEMORY PARTITION
  8699.     AX = DF02h
  8700.     BL = task number
  8701. Return: AL = status
  8702.         00h Carousel not running
  8703.         01h successful
  8704.         FFh unsucessful
  8705.         AH = error code (01h,03h) (see #1147)
  8706. --------T-21DF03-----------------------------
  8707. INT 21 - Software Carousel - GET PARTITION SIZE AND PROGRAM STATUS
  8708.     AX = DF03h
  8709.     BL = task number
  8710. Return: AL = status
  8711.         00h Carousel not running
  8712.         01h successful
  8713.         BL = partition state (00h no program running, 01h prog running)
  8714.         DX = partition size in KB
  8715.         FFh unsucessful
  8716.         AH = error code (01h) (see #1147)
  8717. SeeAlso: AX=DF05h
  8718. --------T-21DF04-----------------------------
  8719. INT 21 - Software Carousel - GET PARTITION NAME
  8720.     AX = DF04h
  8721.     BL = task number
  8722. Return: AL = status
  8723.         00h Carousel not running
  8724.         01h successful
  8725.         CX = length of name (00h if default partition name)
  8726.         ES:BX -> partition name (if CX nonzero)
  8727.         FFh unsucessful
  8728.         AH = error code (01h) (see #1147)
  8729. SeeAlso: AX=DF06h
  8730. --------T-21DF05-----------------------------
  8731. INT 21 - Software Carousel - CHANGE PARTITION SIZE
  8732.     AX = DF05h
  8733.     BL = task number
  8734.     DX = new size in KB
  8735. Return: AL = status
  8736.         00h Carousel not running
  8737.         01h successful
  8738.         FFh unsucessful
  8739.         AH = error code (01h,04h,05h) (see #1147)
  8740.     BX = minimum size allowed
  8741.     CX = maximum size available
  8742. SeeAlso: AX=DF03h
  8743. --------T-21DF06-----------------------------
  8744. INT 21 - Software Carousel - CHANGE PARTITION NAME
  8745.     AX = DF06h
  8746.     BL = task number
  8747.     CX = length of new name (00h to use default, max 18h)
  8748.     DS:SI -> new name
  8749. Return: AL = status
  8750.         00h Carousel not running
  8751.         01h successful
  8752.         FFh unsucessful
  8753.         AH = error code (01h) (see #1147)
  8754. SeeAlso: AX=DF04h
  8755. --------T-21DF07-----------------------------
  8756. INT 21 - Software Carousel - SEND COMMAND TO MEMORY SECTION
  8757.     AX = DF07h
  8758.     BL = task number
  8759.     CX = length of command (max 8 chars)
  8760.     DS:SI -> command line
  8761. Return: AL = status
  8762.         00h Carousel not running
  8763.         01h successful
  8764.         FFh unsucessful
  8765.         AH = error code (01h,06h) (see #1147)
  8766. Note:    the maximum length seems too small and may be a typo for 80 characters
  8767. --------T-21DF08-----------------------------
  8768. INT 21 - Software Carousel - SELECTIVELY ENABLE/DISABLE MENU AND SWITCHING
  8769.     AX = DF08h
  8770.     BL = new state of keyboard (00h disabled, 01h enabled)
  8771. Return: AL = status
  8772.         00h Carousel not running
  8773.         01h successful
  8774. Program: Software Carousel is a task switcher by SoftLogic Solutions, Inc.
  8775. Note:    when the keyboard is is disabled, the user may neither access the
  8776.       Carousel menu nor switch to another memory section
  8777. --------T-21DF09-----------------------------
  8778. INT 21 - Software Carousel - BOOT THE SYSTEM
  8779.     AX = DF09h
  8780. Return: AL = status
  8781.         00h Carousel not running
  8782.         FFh unsucessful
  8783.         AH = error code (01h,03h) (see #1147)
  8784. Note:    this function never returns if successful
  8785. --------T-21DF0A-----------------------------
  8786. INT 21 - Software Carousel - GET MEMORY SIZE/PARTITION NUMBER OF CURRENT TASK
  8787.     AX = DF0Ah
  8788. Return: AL = status
  8789.         00h Carousel not running
  8790.         01h successful
  8791.         BL = task number
  8792.         DX = memory size in KB
  8793.         FFh unsucessful
  8794.         AH = error code (01h,03h) (see #1147)
  8795. --------T-21DF0B-----------------------------
  8796. INT 21 - Software Carousel - SET TASK SWITCH CALLBACK
  8797.     AX = DF0Bh
  8798.     BH = interrupt number or 00h
  8799.     BL = function number to invoke on partition switch
  8800.     CL = function number to call when it is safe for resident programs
  8801.         to perform DOS calls
  8802.     DS:DX -> FAR function to call if BH=00h
  8803. Return: AL = status
  8804.         00h Carousel not running
  8805.         01h successful
  8806.         FFh unsucessful
  8807.         AH = error code (01h,03h) (see #1147)
  8808. Notes:    the specified interrupt or FAR function is called with AH set to the
  8809.       appropriate one of the values specified in BL and CL, and BL set to
  8810.       the new task number
  8811.     the function specified by CL will not be called until the notification
  8812.       is enabled with AX=DF0Ch
  8813. SeeAlso: AX=DF0Ch
  8814. --------T-21DF0C-----------------------------
  8815. INT 21 - Software Carousel - ENABLE DOS-CALL SAFETY NOTIFICATION
  8816.     AX = DF0Ch
  8817. Return: AL = status
  8818.         00h Carousel not running
  8819.         01h successful
  8820. Program: Software Carousel is a task switcher by SoftLogic Solutions, Inc.
  8821. SeeAlso: AX=DF0Bh
  8822. --------O-21E0-------------------------------
  8823. INT 21 - Digital Research DOS Plus - CALL BDOS
  8824.     AH = E0h
  8825.     CL = BDOS function number (see #3268 at INT E0"CP/M-86")
  8826.     other registers as appropriate for function
  8827. Return: as appropriate for function
  8828. SeeAlso: AX=4459h,INT E0"CP/M-86"
  8829. --------E-21E0-------------------------------
  8830. INT 21 - OS/286, OS/386 - INITIALIZE REAL PROCEDURE
  8831.     AH = E0h
  8832.     ???
  8833. Return: ???
  8834. SeeAlso: AH=E1h"OS/286"
  8835. --------T-21E0-------------------------------
  8836. INT 21 - DoubleDOS - MENU CONTROL
  8837.     AH = E0h
  8838.     AL = subfunction
  8839.         01h exchange tasks
  8840.         73h resume invisible job if suspended
  8841.         74h kill other job
  8842.         75h suspend invisible job
  8843. Note:    identical to AH=F0h
  8844. SeeAlso: AH=F0h"DoubleDOS"
  8845. --------v-21E0-------------------------------
  8846. INT 21 - VIRUS - "Jerusalem", "Armagedon" - INSTALLATION CHECK
  8847.     AH = E0h
  8848. Return: AX = 0300h if "Jerusalem" resident
  8849.     AX = DADAh if "Armagedon" resident
  8850. SeeAlso: AH=DEh"VIRUS",AX=DEDEh"VIRUS",AX=E00Fh
  8851. --------N-21E0-------------------------------
  8852. INT 21 - Novell NetWare, Alloy NTNX - PRINT SPOOLING
  8853.     AH = E0h
  8854.     DS:SI -> request buffer (see #1148)
  8855.     ES:DI -> reply buffer
  8856. Return: AL = status
  8857. Note:    this function was added in NetWare 4.0, but is no longer listed in
  8858.       current Novell documentation and may no longer be supported
  8859. SeeAlso: AH=E3h/SF=68h,AX=F211h/SF=06h,AX=F211h/SF=0Ah
  8860.  
  8861. Format of NetWare print spooling request buffer:
  8862. Offset    Size    Description    (Table 1148)
  8863.  00h    WORD    length of following data
  8864.  02h    BYTE    subfunction
  8865.         00h spool data to a capture file
  8866.         01h close and queue capture file
  8867.         02h set spool flags
  8868.         03h spool existing file
  8869.         04h get spool queue entry
  8870.         05h remove entry from spool queue
  8871.  03h    ???
  8872. SeeAlso: #1437
  8873. --------N-21E0--SF06-------------------------
  8874. INT 21 - Novell NetWare - PRINT SERVICES - GET PRINTER STATUS
  8875.     AH = E0h subfn 06h
  8876.     DS:SI -> request buffer (see #1149)
  8877.     ES:DI -> reply buffer (see #1150)
  8878. Return: AL = status
  8879.         00h successful
  8880.         FFh no such printer
  8881. Desc:    get current state of specified printer attached to the server
  8882. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  8883.       Alloy NTNX
  8884.  
  8885. Format of NetWare "Get Printer Status" request buffer:
  8886. Offset    Size    Description    (Table 1149)
  8887.  00h    WORD    0002h (length of following data)
  8888.  02h    BYTE    06h (subfunction "Get Printer Status")
  8889.  03h    BYTE    printer number (00h-04h)
  8890. SeeAlso: #1150
  8891.  
  8892. Format of NetWare "Get Printer Status" reply buffer:
  8893. Offset    Size    Description    (Table 1150)
  8894.  00h    WORD    (call) 0004h (size of following results buffer)
  8895.  02h    BYTE    flag: 00h printer active, FFh printer halted
  8896.  03h    BYTE    flag: 00h printer online, 01h printer offline
  8897.  04h    BYTE    current form type
  8898.  05h    BYTE    target printer number (00h-04h)
  8899.         same as number in request buffer unless rerouted by server
  8900.           console
  8901. SeeAlso: #1149
  8902. --------N-21E0--SF09-------------------------
  8903. INT 21 - Novell NetWare - PRINT SERVICES - SPECIFY CAPTURE FILE
  8904.     AH = E0h subfn 09h
  8905.     DS:SI -> request buffer (see #1151)
  8906.     ES:DI -> reply buffer (see #1152)
  8907. Return: AL = status
  8908.         00h successful
  8909.         9Ch invalid path
  8910. Desc:    create a permanent capture file for the next print capture to be
  8911.       started
  8912. Notes:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  8913.       Alloy NTNX
  8914.     the caller must have read, write, and create rights for the directory
  8915.       containing the capture file
  8916.  
  8917. Format of NetWare "Specify Capture File" request buffer:
  8918. Offset    Size    Description    (Table 1151)
  8919.  00h    WORD    length of following data (max 102h)
  8920.  02h    BYTE    09h (subfunction "Specify Capture File")
  8921.  03h    BYTE    directory handle or 00h
  8922.  04h    BYTE    length of filename
  8923.  05h  N BYTEs    name of capture file
  8924. SeeAlso: #1152
  8925.  
  8926. Format of NetWare reply buffer:
  8927. Offset    Size    Description    (Table 1152)
  8928.  00h    WORD    (call) 0000h (no results returned)
  8929. SeeAlso: #1151
  8930. --------v-21E00F-----------------------------
  8931. INT 21 - VIRUS - "8-tunes" - INSTALLATION CHECK
  8932.     AX = E00Fh
  8933. Return: AX = 4C31h if resident
  8934. SeeAlso: AH=E0h"VIRUS",AH=E1h"VIRUS"
  8935. --------E-21E1-------------------------------
  8936. INT 21 - OS/286, OS/386 - ISSUE REAL PROCEDURE CALL
  8937.     AH = E1h
  8938.     ???
  8939. Return: ???
  8940. Note:    protected mode only???
  8941. SeeAlso: AH=E0h"OS/286",AH=E2h"OS/286",AH=E3h"OS/286",AX=250Eh,INT 31/AX=0301h
  8942. --------T-21E1-------------------------------
  8943. INT 21 - DoubleDOS - CLEAR KEYBOARD BUFFER FOR CURRENT JOB
  8944.     AH = E1h
  8945. SeeAlso: AH=E2h"DoubleDOS",AH=E3h"DoubleDOS",AH=E8h"DoubleDOS"
  8946. SeeAlso: AH=F1h"DoubleDOS"
  8947. --------v-21E1-------------------------------
  8948. INT 21 - VIRUS - "Mendoza", "Fu Manchu" - INSTALLATION CHECK
  8949.     AH = E1h
  8950. Return: AX = 0300h if "Mendoza" resident
  8951.     AX = 0400h if "Fu Manchu" resident
  8952. SeeAlso: AX=E00Fh,AH=E4h"VIRUS"
  8953. --------N-21E1--SF00-------------------------
  8954. INT 21 - Novell NetWare - MESSAGE SERVICES - SEND BROADCAST MESSAGE
  8955.     AH = E1h subfn 00h
  8956.     DS:SI -> request buffer (see #1153)
  8957.     ES:DI -> reply buffer (see #1154)
  8958. Return: AL = status
  8959.         00h successful
  8960.         FEh I/O error or out of dynamic workspace
  8961. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  8962. SeeAlso: AH=DEh"NetWare",AH=DEh/DL=04h,AH=E1h/SF=01h,AH=E1h/SF=04h
  8963. SeeAlso: AH=E1h/SF=09h
  8964.  
  8965. Format of NetWare "Send Broadcast Message" request buffer:
  8966. Offset    Size    Description    (Table 1153)
  8967.  00h    WORD    length of following data (max 9Eh)
  8968.  02h    BYTE    00h (subfunction "Send Broadcast Message")
  8969.  03h    BYTE    number of connections (01h-64h)
  8970.  04h  N BYTEs    list of connections to receive broadcast message
  8971.     BYTE    length of message (01h-37h)
  8972.       N BYTEs    broadcast message (no control characters or characters > 7Eh)
  8973. SeeAlso: #1154
  8974.  
  8975. Format of NetWare "Send Broadcast Message" reply buffer:
  8976. Offset    Size    Description    (Table 1154)
  8977.  00h    WORD    (call) size of following results buffer (max 65h)
  8978.  02h    BYTE    number of connections
  8979.  03h  N BYTEs    list of per-connection results
  8980.         00h successful
  8981.         FCh message rejected due to lack of buffer space
  8982.         FDh invalid connection number
  8983.         FFh blocked (see also AH=E1h/SF=02h)
  8984. SeeAlso: #1153
  8985. --------N-21E1--SF01-------------------------
  8986. INT 21 - Novell NetWare - MESSAGE SERVICES - GET BROADCAST MESSAGE (OLD)
  8987.     AH = E1h subfn 01h
  8988.     DS:SI -> request buffer (see #1155)
  8989.     ES:DI -> reply buffer (see #1156)
  8990. Return: AL = status
  8991.         00h successful
  8992.         FCh full message queue
  8993.         FEh out of dynamic workspace
  8994. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  8995. SeeAlso: AH=DEh/DL=04h,AH=E1h/SF=00h,AH=E1h/SF=05h,AH=E1h/SF=09h
  8996. SeeAlso: AX=F215h/SF=01h,AX=F215h/SF=0Bh
  8997.  
  8998. Format of NetWare "Get Broadcast Message" request buffer:
  8999. Offset    Size    Description    (Table 1155)
  9000.  00h    WORD    0001h (length of following data)
  9001.  02h    BYTE    01h (subfunction "Get Broadcast Message")
  9002. SeeAlso: #1156,#1445
  9003.  
  9004. Format of NetWare "Get Broadcast Message" reply buffer:
  9005. Offset    Size    Description    (Table 1156)
  9006.  00h    WORD    (call) size of following results buffer (max 38h)
  9007.  02h    BYTE    length of message (00h-37h)
  9008.         00h if no broadcast messages pending
  9009.  03h  N BYTEs    message (no control characters or characters > 7Eh)
  9010. SeeAlso: #1155,#1443,#1446
  9011. --------N-21E1--SF02-------------------------
  9012. INT 21 - Novell NetWare - MESSAGE SERVICES - DISABLE BROADCAST MESSAGES
  9013.     AH = E1h subfn 02h
  9014.     DS:SI -> request buffer (see #1158)
  9015.     ES:DI -> reply buffer (see #1159)
  9016. Return: AL = error code
  9017. Note:    these functions are supported by NetWare 4.0+ but are not listed in
  9018.       _NetWare_System_Calls--DOS_; they may be obsolete
  9019. SeeAlso: AH=E1h/SF=00h,AH=E1h/SF=03h,AH=E1h/SF=04h,AH=E1h/SF=09h
  9020. SeeAlso: AX=F215h/SF=02h
  9021.  
  9022. Format of NetWare "Disable Broadcasts" request packet:
  9023. Offset    Size    Description    (Table 1157)
  9024.  00h    WORD    0001h (length of following data)
  9025.  02h    BYTE    02h (subfunction "Enable Broadcast Messages")
  9026. SeeAlso: #1158,#1159
  9027. --------N-21E1--SF03-------------------------
  9028. INT 21 - Novell NetWare - MESSAGE SERVICES - ENABLE BROADCAST MESSAGES
  9029.     AH = E1h subfn 03h
  9030.     DS:SI -> request buffer (see #1158)
  9031.     ES:DI -> reply buffer (see #1159)
  9032. Return: AL = error code
  9033. Note:    these functions are supported by NetWare 4.0+ but are not listed in
  9034.       _NetWare_System_Calls--DOS_; they may be obsolete
  9035. SeeAlso: AH=E1h/SF=00h,AH=E1h/SF=02h,AH=E1h/SF=04h,AH=E1h/SF=09h
  9036. SeeAlso: AX=F215h/SF=03h
  9037.  
  9038. Format of NetWare "Enable Broadcast Messages" request buffer:
  9039. Offset    Size    Description    (Table 1158)
  9040.  00h    WORD    0001h (length of following data)
  9041.  02h    BYTE    03h (subfunction "Enable Broadcast Messages")
  9042. SeeAlso: #1159,#1157
  9043.  
  9044. Format of NetWare "Enable/Disable Broadcast Messages" reply buffer:
  9045. Offset    Size    Description    (Table 1159)
  9046.  00h    WORD    (call) 0000h (no data returned)
  9047. SeeAlso: #1158,#1157
  9048. --------N-21E1--SF04-------------------------
  9049. INT 21 O - Novell NetWare - MESSAGE SERVICES - SEND PERSONAL MESSAGE
  9050.     AH = E1h subfn 04h
  9051.     DS:SI -> request buffer (see #1160)
  9052.     ES:DI -> reply buffer (see #1161)
  9053. Return: AL = status
  9054.         00h successful
  9055.         FEh I/O error or out of dynamic workspace
  9056. Notes:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0-2.x
  9057.     message pipes use CPU time on the file server; IPX, SPX, or NetBIOS
  9058.       connections should be used for peer-to-peer communications as these
  9059.       protocols do not use file server time
  9060. SeeAlso: AH=E1h/SF=00h,AH=E1h/SF=05h,AH=E1h/SF=06h,AH=E1h/SF=08h
  9061.  
  9062. Format of NetWare "Send Personal Message" request buffer:
  9063. Offset    Size    Description    (Table 1160)
  9064.  00h    WORD    length of following data (max E5h)
  9065.  02h    BYTE    04h (subfunction "Send Personal Message")
  9066.  03h    BYTE    number of connections (01h-64h)
  9067.  04h  N BYTEs    list of connections to receive broadcast message
  9068.     BYTE    length of message (01h-7Eh)
  9069.       N BYTEs    message (no control characters or characters > 7Eh)
  9070. SeeAlso: #1161
  9071.  
  9072. Format of NetWare "Send Personal Message" reply buffer:
  9073. Offset    Size    Description    (Table 1161)
  9074.  00h    WORD    (call) size of following results buffer (max 65h)
  9075.  02h    BYTE    number of connections
  9076.  03h  N BYTEs    list of per-connection results
  9077.         00h successful
  9078.         FCh message rejected because queue is full (contains 6 msgs)
  9079.         FDh incomplete pipe
  9080.         FFh failed
  9081. SeeAlso: #1160
  9082. --------N-21E1--SF05-------------------------
  9083. INT 21 O - Novell NetWare - MESSAGE SERVICES - GET PERSONAL MESSAGE
  9084.     AH = E1h subfn 05h
  9085.     DS:SI -> request buffer (see #1162)
  9086.     ES:DI -> reply buffer (see #1163)
  9087. Return: AL = status
  9088.         00h successful
  9089.         FEh out of dynamic workspace
  9090. Desc:    return the oldest message in the default file server's message queue
  9091.       for the calling workstation
  9092. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0-2.x
  9093. SeeAlso: AH=E1h/SF=01h,AH=E1h/SF=04h,AH=E1h/SF=06h,AH=E1h/SF=08h
  9094.  
  9095. Format of NetWare "Get Personal Message" request buffer:
  9096. Offset    Size    Description    (Table 1162)
  9097.  00h    WORD    0001h (length of following data)
  9098.  02h    BYTE    05h (subfunction "Get Personal Message")
  9099. SeeAlso: #1163
  9100.  
  9101. Format of NetWare "Get Personal Message" reply buffer:
  9102. Offset    Size    Description    (Table 1163)
  9103.  00h    WORD    (call) size of following results buffer (max 80h)
  9104.  02h    BYTE    connection number of sending station
  9105.  03h    BYTE    length of message (00h-7Eh)
  9106.         00h if no personal messages pending
  9107.  04h  N BYTEs    message (no control characters or characters > 7Eh)
  9108. SeeAlso: #1162
  9109. --------N-21E1--SF06-------------------------
  9110. INT 21 O - Novell NetWare - MESSAGE SERVICES - OPEN MESSAGE PIPE
  9111.     AH = E1h subfn 06h
  9112.     DS:SI -> request buffer (see #1164)
  9113.     ES:DI -> reply buffer (see #1165)
  9114. Return: AL = status
  9115.         00h successful
  9116.         FEh out of dynamic workspace
  9117. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0-2.x
  9118. SeeAlso: AH=E1h/SF=04h,AH=E1h/SF=07h,AH=E1h/SF=08h
  9119.  
  9120. Format of NetWare "Open Message Pipe" request buffer:
  9121. Offset    Size    Description    (Table 1164)
  9122.  00h    WORD    length of following data (max 66h)
  9123.  02h    BYTE    06h (subfunction "Open Message Pipe")
  9124.  03h    BYTE    number of pipes to open (01h-64h)
  9125.  04h  N BYTEs    list of connection numbers
  9126. SeeAlso: #1165,#1166,#1169
  9127.  
  9128. Format of NetWare "Open Message Pipe" reply buffer:
  9129. Offset    Size    Description    (Table 1165)
  9130.  00h    WORD    (call) size of following results buffer (max 65h)
  9131.  02h    BYTE    number of connections
  9132.  03h  N BYTEs    list of results
  9133.         00h successful
  9134.         FEh incomplete (target half not yet created)
  9135.         FFh failed
  9136. SeeAlso: #1164,#1167,#1170
  9137. --------N-21E1--SF07-------------------------
  9138. INT 21 O - Novell NetWare - MESSAGE SERVICES - CLOSE MESSAGE PIPE
  9139.     AH = E1h subfn 07h
  9140.     DS:SI -> request buffer (see #1166)
  9141.     ES:DI -> reply buffer (see #1167)
  9142. Return: AL = status
  9143.         00h successful
  9144.         FCh full message queue
  9145.         FEh out of dynamic workspace
  9146. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0-2.x
  9147. SeeAlso: AH=E1h/SF=05h,AH=E1h/SF=06h,AH=E1h/SF=08h
  9148.  
  9149. Format of NetWare "Close Mesage Pipe" request buffer:
  9150. Offset    Size    Description    (Table 1166)
  9151.  00h    WORD    length of following data (max 66h)
  9152.  02h    BYTE    07h (subfunction "Close Message Pipe")
  9153.  03h    BYTE    number of pipes to close (01h-64h)
  9154.  04h  N BYTEs    list of connection numbers
  9155. SeeAlso: #1164,#1167
  9156.  
  9157. Format of NetWare "Close Message Pipe" reply buffer:
  9158. Offset    Size    Description    (Table 1167)
  9159.  00h    WORD    (call) size of following results buffer (max 65h)
  9160.  02h    BYTE    number of connections
  9161.  03h  N BYTEs    list of results
  9162.         00h successful
  9163.         FDh failed
  9164.         FFh no such pipe
  9165. SeeAlso: #1165,#1166
  9166. --------N-21E1--SF08-------------------------
  9167. INT 21 O - Novell NetWare - MESSAGE SERVICES - CHECK PIPE STATUS
  9168.     AH = E1h subfn 08h
  9169.     DS:SI -> request buffer (see #1169)
  9170.     ES:DI -> reply buffer (see #1170)
  9171. Return: AL = status (see #1168)
  9172. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0-2.x
  9173. SeeAlso: AH=E1h/SF=05h,AH=E1h/SF=06h,AH=E1h/SF=07h,AX=F215h/SF=08h
  9174.  
  9175. (Table 1168)
  9176. Values for NetWare function status:
  9177.  00h    successful
  9178.  FCh    full message queue
  9179.  FEh    out of dynamic workspace
  9180. SeeAlso: #1173
  9181.  
  9182. Format of NetWare "Check Pipe Status" request buffer:
  9183. Offset    Size    Description    (Table 1169)
  9184.  00h    WORD    length of following data (max 66h)
  9185.  02h    BYTE    08h (subfunction "Check Pipe Status")
  9186.  03h    BYTE    number of pipes to monitor (01h-64h)
  9187.  04h  N BYTEs    list of connection numbers
  9188. SeeAlso: #1164,#1170
  9189.  
  9190. Format of NetWare "Check Pipe Status" reply buffer:
  9191. Offset    Size    Description    (Table 1170)
  9192.  00h    WORD    (call) size of following results buffer (max 65h)
  9193.  02h    BYTE    number of connections
  9194.  03h  N BYTEs    list of pipe statuses
  9195.         00h open
  9196.         FEh incomplete
  9197.         FFh closed
  9198. SeeAlso: #1165,#1169,#1444
  9199. --------N-21E1--SF09-------------------------
  9200. INT 21 - Novell NetWare - MESSAGE SERVICES - BROADCAST TO CONSOLE
  9201.     AH = E1h subfn 09h
  9202.     DS:SI -> request buffer (see #1171)
  9203.     ES:DI -> reply buffer (see #1172)
  9204. Return: AL = status (see #1168)
  9205. Desc:    send a one-line message to the system console on the default file
  9206.       server
  9207. Note:    this function is supported by NetWare 4.0+ and Advanced NetWare 1.0+
  9208. SeeAlso: AH=DEh/DL=04h,AH=E1h/SF=00h,AH=E1h/SF=01h,AH=E3h/SF=D1h
  9209. SeeAlso: AX=F215h/SF=09h
  9210.  
  9211. Format of NetWare "Broadcast to Console" request buffer:
  9212. Offset    Size    Description    (Table 1171)
  9213.  00h    WORD    length of following data (max 3Eh)
  9214.  02h    BYTE    09h (subfunction "Broadcast to Console")
  9215.  03h    BYTE    length of message (01h-3Ch)
  9216.  04h  N BYTEs    message (no control characters or characters > 7Eh)
  9217. SeeAlso: #1172
  9218.  
  9219. Format of NetWare reply buffer:
  9220. Offset    Size    Description    (Table 1172)
  9221.  00h    WORD    (call) 0000h (no results returned)
  9222. SeeAlso: #1171
  9223. --------!---Section--------------------------
  9224.